Короткий ответ
Команда docker logs CONTAINER выводит stdout/stderr контейнера; флаг -f переключает в режим постоянного чтения (follow), --tail N ограничивает вывод последними N строками.
Как это работает подробнее
по умолчанию Docker перехватывает stdout и stderr главного процесса контейнера через драйвер логирования (по умолчанию json-file) и сохраняет их на диске хоста; docker logs читает эти сохранённые записи, независимо от того, работает контейнер сейчас или уже остановлен (если он не был удалён).
Пример кода
Пример конфигурации
$ docker logs --tail 20 -f myapp
2024-05-01T10:00:01Z INFO starting server on :8080
2024-05-01T10:00:05Z ERROR failed to connect to db: connection refusedЧто использовать на практике
- Практика.
docker logs -f --tail 100 myapp— типичная команда для live-наблюдения за последними записями при диагностике; для контейнеров, уже упавших (docker ps -aпоказываетExited),docker logsвсё равно покажет накопленный вывод, что часто первый шаг диагностики причины падения.
Подводные камни
- Риск. ожидают увидеть логи приложения, которое пишет не в stdout/stderr, а в файл внутри контейнера —
docker logsих не покажет, нужно либоdocker exec/docker cpдля чтения файла, либо перенастроить приложение писать в stdout.