docker logs

Тема дорожной карты · Docker & Containers

docker logs <container> выводит все данные, которые главный процесс контейнера отправляет в stdout и stderr. Эта команда является неотъемлемой частью процесса отладки и мониторинга контейнеров Docker, обеспечивая быстрый доступ к логам приложения. С помощью различных флагов, таких как -f для реального времени, --tail 100 для ограничения количества строк, --since 10m для фильтрации по времени, и -t для добавления таймстампов, можно управлять выводом логов и получать более детализированную информацию.

При работе с логами важно понимать, что команда docker logs поддерживает только определенные драйверы логирования, такие как json-file, local и journald. Для других драйверов, таких как fluentd, gelf и syslog, потребуется напрямую обращаться к лог-коллектору для получения информации. Это может усложнить процесс отладки, особенно если вы используете несколько драйверов логирования.

Как это работает

Команда docker logs является частью более широкой системы команд Docker, которая позволяет управлять контейнерами на различных этапах их жизненного цикла. Например, команда docker pull и docker push используются для перемещения образов между репозиториями, в то время как docker run создает и запускает контейнер из образа. Команда docker exec позволяет запускать команды внутри уже запущенного контейнера, а docker ps показывает все запущенные контейнеры, включая остановленные (docker ps -a). Команда docker inspect возвращает полную информацию в формате JSON о любом ресурсе Docker.

Флаги для команды docker logs могут быть комбинированы для получения более специфической информации. Например, команда docker run --rm -it --name myapp -p 8080:80 -v $PWD:/app nginx запускает контейнер nginx с именем myapp, используя порт 8080 для доступа к контейнеру, а также подключает текущую директорию к директории контейнера /app.

Когда применять

docker logs особенно полезна для быстрого доступа к логам при отладке или мониторинге контейнеров. Она идеально подходит для временных или разовых задач, таких как тестирование или отладка CLI-инструментов. Однако, для более стабильных и повторяемых задач, таких как запуск сервисов, разработка или интеграция в CI/CD, рекомендуется использовать docker compose. Это позволяет использовать YAML-файлы для конфигурации, что упрощает ревью и версионирование конфигураций, по сравнению с длинными CLI-командами.

Команда docker exec -it container sh также полезна для отладки, особенно когда контейнер уже запущен и возникли ошибки. Она позволяет запустить оболочку внутри контейнера для более детального анализа проблемы.

Типичные ошибки

При работе с docker logs часто встречаются несколько типичных ошибок. Например, остановленные контейнеры могут оставаться навечно, что может привести к излишнему использованию дискового пространства. Для предотвращения этого, следует использовать флаг --rm, который удалит контейнер после его завершения. Также, важно помнить, что использование флага -d для запуска контейнера в фоновом режиме требует использования команды docker attach для подключения к контейнеру.

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

Для мониторинга использования дискового пространства, рекомендуется регулярно использовать команду docker system df, которая показывает, какие контейнеры и образы используют больше всего места на диске.

Связанные понятия

Полезные ресурсы