Как использовать команду docker compose logs для просмотра вывода контейнеров

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь эффективно использовать команду docker logs для просмотра вывода ваших Docker-контейнеров. Мы начнём с изучения основ просмотра логов из работающего контейнера.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555082{{"Как использовать команду docker compose logs для просмотра вывода контейнеров"}} docker/logs -.-> lab-555082{{"Как использовать команду docker compose logs для просмотра вывода контейнеров"}} docker/pull -.-> lab-555082{{"Как использовать команду docker compose logs для просмотра вывода контейнеров"}} docker/images -.-> lab-555082{{"Как использовать команду docker compose logs для просмотра вывода контейнеров"}} end

Запуск сервисов и просмотр базовых логов

На этом шаге мы научимся запускать Docker-контейнер и просматривать его базовые логи. Логи необходимы для понимания происходящего внутри контейнера, отладки проблем и мониторинга его работы.

Сначала загрузим простой образ Nginx из Docker Hub. Этот образ будет использоваться для запуска контейнера веб-сервера.

docker pull nginx:latest

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

docker images

Теперь запустим контейнер на основе образа Nginx. Мы запустим его в detached-режиме (-d), чтобы он работал в фоновом режиме, и назовём его my-nginx.

docker run -d --name my-nginx nginx

Вывод этой команды будет содержать ID контейнера. Это означает, что контейнер успешно запущен в фоновом режиме.

Чтобы увидеть базовые логи, сгенерированные контейнером my-nginx, используем команду docker logs с указанием имени или ID контейнера.

docker logs my-nginx

Вы увидите стандартный вывод и поток ошибок (stderr) от процесса Nginx, работающего внутри контейнера. Эти логи обычно включают информацию о запуске сервера Nginx и обработке запросов.

Отслеживание логов в реальном времени

На предыдущем шаге мы просматривали логи контейнера после его запуска. Однако иногда необходимо видеть логи по мере их генерации, в реальном времени. Это особенно полезно для отладки или мониторинга активных процессов.

Для отслеживания логов контейнера в реальном времени используем команду docker logs с опцией -f (или --follow). Это оставит терминал открытым и будет отображать новые записи логов по мере их появления.

Давайте отследим логи нашего контейнера my-nginx:

docker logs -f my-nginx

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

Чтобы сгенерировать новые записи логов, мы можем отправить запрос к веб-серверу Nginx внутри контейнера. По умолчанию Nginx слушает порт 80. Хотя мы не пробросили порт на хост в команде docker run, мы всё равно можем получить доступ к сети контейнера с хоста с помощью curl.

Откройте новую вкладку терминала в среде LabEx. В этой новой вкладке выполните следующую команду для отправки запроса к контейнеру Nginx:

curl http://localhost:80

В новой вкладке терминала вы увидите HTML-код стандартной приветственной страницы Nginx.

Теперь вернитесь к вкладке терминала, где вы отслеживаете логи (docker logs -f my-nginx). Вы должны увидеть новые записи логов, указывающие на обработку Nginx запроса от curl. Эти записи обычно содержат информацию об IP-адресе клиента, методе запроса, запрашиваемом пути и HTTP-коде состояния.

Чтобы прекратить отслеживание логов, нажмите Ctrl+C в терминале, где выполняется команда docker logs -f.

Просмотр логов с временными метками и выборкой последних записей

На предыдущих шагах мы рассматривали базовые логи и отслеживали их в реальном времени. Однако стандартный вывод docker logs не включает временные метки, что может затруднить сопоставление событий или понимание временных характеристик записей. Кроме того, иногда требуется просмотреть только самые последние записи логов.

Для включения временных меток в вывод логов используем опцию -t (или --timestamps) с командой docker logs.

Давайте посмотрим логи нашего контейнера my-nginx с временными метками:

docker logs -t my-nginx

Теперь перед каждой записью лога будет отображаться временная метка, указывающая, когда эта запись была сгенерирована контейнером. Это очень полезно для отладки и анализа.

Иногда требуется просмотреть только самые последние записи логов, аналогично использованию команды tail в Linux. Для этого команда docker logs предоставляет опцию --tail. Вы можете указать количество строк, которые хотите увидеть из конца логов.

Например, чтобы просмотреть только последние 5 записей логов контейнера my-nginx:

docker logs --tail 5 my-nginx

Эта команда выведет только последние 5 строк логов контейнера. Вы можете комбинировать --tail с -t для просмотра последних записей с временными метками.

docker logs -t --tail 5 my-nginx

Эта команда покажет последние 5 записей логов, каждая со своей временной меткой.

Фильтрация логов по временному диапазону

Помимо просмотра всех логов или только последних записей, вы также можете фильтровать логи контейнера по определённому временному диапазону. Это полезно при расследовании событий, произошедших в конкретный период времени.

Команда docker logs предоставляет опции --since и --until для фильтрации логов по времени. Эти опции принимают различные форматы времени, включая метки времени RFC3339, Unix-время или относительные значения (например, 10m для 10 минут, 1h для 1 часа).

Давайте попробуем отфильтровать логи. Сначала нам нужно сгенерировать логи в разное время. Мы можем сделать это, отправив несколько запросов curl к контейнеру Nginx.

Откройте новую вкладку терминала и выполните команду curl несколько раз с небольшими паузами между запросами.

curl http://localhost:80
sleep 5
curl http://localhost:80
sleep 5
curl http://localhost:80

Теперь посмотрим логи контейнера my-nginx с временными метками, чтобы увидеть время этих запросов.

docker logs -t my-nginx

Обратите внимание на временные метки записей логов, сгенерированных командами curl.

Для фильтрации логов, начиная с определённого времени, используйте опцию --since. Например, чтобы просмотреть логи за последнюю 1 минуту:

docker logs --since 1m my-nginx

Эта команда покажет все записи логов контейнера my-nginx, сгенерированные за последнюю минуту.

Вы также можете фильтровать логи до определённого времени с помощью опции --until. Например, чтобы просмотреть логи, сгенерированные более 1 минуты назад:

docker logs --until 1m my-nginx

Эта команда покажет все записи логов контейнера my-nginx, сгенерированные более одной минуты назад.

Вы можете комбинировать --since и --until для просмотра логов в конкретном временном окне. Например, чтобы просмотреть логи между 5 минутами назад и 1 минутой назад:

docker logs --since 5m --until 1m my-nginx

Помните, что точный вывод будет зависеть от времени выполнения команд curl и времени запуска команд docker logs.

Итоги

В этой лабораторной работе мы изучили основные шаги использования команды docker logs для просмотра вывода контейнера. Мы начали с загрузки Docker-образа и запуска контейнера в detached-режиме. Затем мы рассмотрели, как просматривать базовые логи, генерируемые работающим контейнером, что даёт представление о его запуске и активности.

Далее мы углубили понимание, изучив как отслеживать логи контейнера в реальном времени с помощью опции -f, что позволяет непрерывно мониторить поток логов по мере их генерации. Такой режим реального времени критически важен для отладки и наблюдения за динамическим поведением контейнеров.