Как посмотреть логи контейнера docker
Перейти к содержимому

Как посмотреть логи контейнера docker

  • автор:

Управление контейнерами — Docker: Основы

Картинка описывает жизненный цикл контейнера. Кружками на нем изображены состояния, жирным выделены консольные команды, а квадратиками показывается то, что в реальности выполняется.

Проследите путь команды docker run . Несмотря на то, что команда одна, с точки зрения работы Docker выполняется два действия: создание контейнера и запуск. Существуют и более сложные варианты исполнения, но в этом разделе мы рассмотрим только базовые команды.

docker run

Запустим nginx так, чтобы он работал в фоне. Для этого после слова run добавляется флаг -d . Дополнительно, зададим контейнеру имя —name=nginx , чтобы упростить обращение к нему.

-d --name=nginx -p 8080:80 nginx 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e 

Убедитесь в том, что nginx работает, открыв в браузере ссылку localhost:8080 . Там вы увидите надпись Welcome to Nginx!.

docker logs

После запуска в фоне, Docker выводит идентификатор контейнера и возвращает управление в терминал. С одной стороны это позволяет работать программе независимо от терминала, с другой, мы теперь потеряли возможность смотреть логи в том месте, где мы ее запустили. Посмотреть логи можно командой docker logs , которой нужно передать идентификатор контейнера или его имя

# docker logs 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e docker logs nginx 172.17.0.1 - - [19/Jan/2018:07:38:55 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "-" 

docker logs выводит текущий лог и завершает работу, что бывает неудобно, если логи нужно просматривать в реальном времени. Для этого можно держать их постоянно открытыми по принципу работы команды tail -f . Для этого запустите docker logs -f 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e . Теперь лог будет обновляться каждый раз, когда вы обновляете страницу в браузере. Выйти из этого режима можно набрав Ctrl + C , при этом сам контейнер остановлен не будет.

docker ps

Теперь выведем информацию о запущенных контейнерах командой docker ps :

"nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 80/tcp nginx 
  • CONTAINER_ID — идентификатор контейнера. Так же, как и в git, используется сокращенная запись хеша
  • IMAGE — имя образа, из которого был поднят контейнер. Если не указан тег, то подразумевается latest
  • COMMAND — команда, которая выполнилась на самом деле при старте контейнера
  • CREATED — время создания контейнера
  • STATUS — текущее состояние
  • PORTS — проброс портов
  • NAMES — алиас. Docker позволяет кроме идентификатора иметь имя. Так гораздо проще обращаться с контейнером. Если при создании контейнера имя не указано, то Docker самостоятельно его придумывает. В выводе выше как раз такое имя у nginx

Команда docker ps выводит только запущенные контейнеры. Но кроме них могут быть и остановленные. Причем остановка может происходить как по успешному завершению, так и в случае ошибок. Попробуйте набрать docker run ubuntu ls , а затем docker run ubuntu bash -c «unknown» . Эти команды не запускают долгоживущий процесс, они завершаются сразу после выполнения, причем вторая с ошибкой, так как такой команды не существует.

Теперь выведем все контейнеры командой docker ps -a . Первыми тремя строчками вывода окажутся:

-a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 85fb81250406 ubuntu "bash -c unkown" Less than a second ago Exited (127) 3 seconds ago loving_bose c379040bce42 ubuntu "ls" Less than a second ago Exited (0) 9 seconds ago determined_tereshkova 

Здесь как раз два последних запуска. Если посмотреть на колонку STATUS , то видно, что оба контейнера находятся в состоянии Exited . То есть запущенная команда внутри них выполнилась, и они остановились. Разница лишь в том, что один завершился успешно (0), а второй с ошибкой (127).

docker stop

Теперь попробуем остановить контейнер. Выполним команду:

# docker stop 431a3b3fc24b docker stop nginx 431a3b3fc24b 

Остановка контейнера не удаляет его. Он будет отображаться в списке запущенных контейнеров:

-a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 431a3b3fc24b nginx "/docker-entrypoint.…" 7 seconds ago Exited (0) 1 second ago nginx 

docker start

После остановки контейнер можно даже перезапустить:

# docker start 31a3b3fc24b docker start nginx 

Запуск контейнера всегда стартует его в фоновом режиме, поэтому вы не увидите лога. Чтобы его посмотреть, воспользуйтесь командой docker logs nginx .

docker kill

docker stop шлет сигнал SIGTERM , который должен обработать приложение внутри контейнера и остановиться. Если оно настроено неправильно, то этого не произойдет и команда docker stop не сможет остановить контейнер. В этом случае понадобится docker kill . Эта команда использует сигнал SIGKILL , который гарантировано останавливает контейнер. Ее вывод идентичен:

# docker kill 431a3b3fc24b docker kill nginx 431a3b3fc24b 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

�� Использование команд docker logs –follow и –tail

Мануал

Автор cryptoparty На чтение 3 мин Опубликовано 14.10.2022

Для разработчиков или инженеров DevOps/SecOps всегда важно просматривать логи приложения, чтобы отладить определенные проблемы или понять события, происходящие в вашем приложении.

В контексте Docker вы можете получить доступ к журналам Docker-контейнера с помощью docker CLI.

Эти логи содержат информацию, которая регистрируется контейнером, и могут помочь в устранении неполадок или мониторинге состояния приложения, когда это необходимо.

В этой статье мы рассмотрим, как просматривать журналы контейнеров docker.

Настройка лабораторной среды

Давайте скачаем образ Nginx из публичного dockerhub с помощью следующей команды.

 
docker pull nginx

Далее запустим Docker с Nginx с помощью приведенной ниже команды.

 
docker run nginx:latest

Теперь давайте проверим, запущен ли контейнер docker, с помощью команды $ docker ps.

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dbc8526c6b7e nginx:latest "/docker-entrypoint.…" 19 seconds ago Up 12 seconds 80/tcp modest_kowalevski

Использование команды docker logs

Команда docker logs позволяет получить логи контейнера docker без необходимости входить внутрь контейнера.

Эти логи собираются из потоков STDOUT и STDERR контейнеров docker.

Логи хранятся на хосте docker в формате JSON, и на каждый контейнер всегда приходится один файл лога.

Синтаксис команды docker logs показан ниже.

 
docker logs

Давайте разберемся в этом на примере.

Использование команды docker logs –follow

Теперь, когда контейнер запущен и работает, давайте просмотрим логи контейнера docker

 
docker logs dbc8526c6b7e

где мы указываем ID контейнера в команде и видим в терминале следующий вывод.

Эта команда покажет логи указанного контейнера docker.

Однако вы не сможете просматривать вывод непрерывно.

Чтобы просматривать логи непрерывно, мы можем создать непрерывный поток вывода на терминал с помощью опции –follow.

 
docker logs --follow

Приведенная выше команда будет передавать последние выходные данные из контейнеров stdout и stderr, и вы сможете отслеживать логи в режиме реального времени до тех пор, пока не остановите процесс.

Этот механизм может быть очень полезен в ситуациях, когда вам нужно устранить неполадки в производственных системах, отслеживая логи контейнеров docker в режиме реального времени.

Использование команды docker logs –tail

Должна возникнуть ситуация, когда вы хотите ограничить количество строк лога контейнера, выводимых на экран.

Команды logs у Docker предоставляют опцию –tail, которая может помочь достичь этой цели.

Давайте рассмотрим это на примере.

 docker logs --tail

Давайте просмотрим 10 строк вывода нашего контейнера Nginx с помощью приведенной ниже команды.

 
docker logs --tail 10 dbc8526c6b7e

Заключение

В этой статье мы узнали о том, как просматривать логи контейнеров docker.

  • �� Как очистить логи запущенных контейнеров Docker
  • �� Почему процессы в контейнерах Docker не должны запускаться от имени Root
  • �� Как проверить изменения в файловой системе контейнера Docker
  • �� Как просмотреть историю событий Docker
  • �� Как автоматически обновлять контейнеры Docker из реджестри образов
  • �� Как запустить несколько контейнеров Docker на разных IP-адресах
  • �� Как использовать Docker с UFW параллельно
  • �� Как запустить несколько служб в одном контейнере Docker
  • �� Как установить Docker на Kali Linux

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!

Добавить комментарий Отменить ответ

Поддержать нас

  • Аудит ИБ (49)
  • Вакансии (12)
  • Закрытие уязвимостей (110)
  • Книги (27)
  • Мануал (2 359)
  • Медиа (66)
  • Мероприятия (39)
  • Мошенники (23)
  • Обзоры (831)
  • Обход запретов (34)
  • Опросы (3)
  • Скрипты (116)
  • Статьи (360)
  • Философия (124)
  • Юмор (18)

Наш Telegram

Социальные сети
Поделиться

Anything in here will be replaced on browsers that support the canvas element

  • �� Каковы различные форматы сертификатов? 27.10.2023

Цифровые сертификаты могут использоваться для различных целей. Они могут использоваться для защиты соединений с веб-сайтами, для шифрования сообщений электронной почты или для проверки личности пользователя. Выбор правильного формата сертификата необходим для обеспечения безопасности и сохранности данных. Когда речь идет о различных форматах сертификатов, важно выбрать тот, который соответствует вашим потребностям Выберите формат сертификата, совместимый с […]

Преобразование файла PFX (PKCS #12) в формат PEM (Privacy Enhanced Mail) достаточно просто на Linux и Unix-подобных системах. В этой статье мы рассмотрим, как преобразовать файл сертификата в формате PFX в файл PEM с помощью OpenSSL из командной строки. Что такое файл PFX? PFX (также PKCS#12) – это формат файла, содержащего сертификат(ы) и закрытый(ые) ключ(ы), […]

Одним из основных нововведений, появившихся в Podman, стала возможность запуска контейнеров без прав root. С точки зрения безопасности это было существенным улучшением, поскольку потенциально скомпрометированный контейнер, запущенный от имени root, представляет собой угрозу безопасности для хост-системы. Чтобы добиться аналогичного поведения, последние версии Docker поддерживают запуск демона docker в пользовательском контексте. �� Почему процессы в контейнерах […]

Small Form Factor Pluggable (SFP) – это компактный приёмопередатчик, который устанавливается в SFP порт коммутатора Ethernet. Модуль используется для присоединения платы сетевого устройства к оптическому волокну или витой паре. Модули SFP заменили устаревшие модули GBIC благодаря своим миниатюрным размерам. Это преимущество в размерах позволяет им эффективно работать в ограниченных сетевых средах, обеспечивая быстрый обмен данными […]

Давайте поговорим о классификации вредоносных программ. Когда антивирусная программа или средство защиты от вредоносного ПО обнаруживает что-то потенциально вредоносное, она использует определенный формат, чтобы помочь вам или другим специалистам понять, с какой именно угрозой вы имеете дело. Формат может выглядеть примерно так: Type:Platform/Family.Variant!Suffixes Это не всегда будет выглядеть именно так, поскольку, как вы помните, не […]

Просмотр docker logs

Для просмотра логов из контейнера используется удобная и понятная команда docker logs.

Что еще удобного есть в команде docker logs?

  1. —follow — просматривать логи в режиме реального времени (-f)
  2. —details — выводить дополнительную информацию в логах
  3. —tail n — выводить последние n логов. Удобно если контейнер пишет очень много логов, а нам интересна лишь ее последняя часть.
  4. —since и —until — показывать логи в определенном интервале, заданным timestamp (2018-11-014T21:23:37) или вида 1m, 30m и так далее.
  5. —timestamps или -t — показывать время логов.

Leave a Comment Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Как увидеть результат запуска контейнера?

Я на основе образа ubuntu собрал контейнер. его суть в том, что устанавливается и запускается консольный монитор ресурсов ОС. Вот докерфайл:

FROM ubuntu RUN apt-get -y update && apt-get install -y htop CMD ["/bin/sh", "-c", "export TERM=xterm && /usr/bin/htop"] 

Контейнер собрался успешно, но после запуска я не могу увидеть результат работы. дело в том, что после запуска команды:

docker run ubuntu-htop 

ничего не происходит. Я ожидаю, что откроется отдельное окно с выводом инофрмации о системных ресурсах ОС, но этого не происходит. Подскажите пожалуйста в чём суть проблемы и как её решить. Моя ОС linux mint 17

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *