Docker logs: посмотреть и ограничить размер логов
Логи контейнера показывает команда docker logs имя. Ключ -f следит за выводом в реальном времени, --tail 100 показывает последние 100 строк, а --since 10m строки за последние десять минут. Размер журналов по умолчанию не ограничен, поэтому настройте ротацию.
Основные команды
docker logs my-app # весь вывод контейнера
docker logs -f my-app # следить в реальном времени (выход Ctrl+C)
docker logs --tail 100 my-app # последние 100 строк
docker logs -f --tail 20 my-app # последние 20 строк и далее в реальном времени
docker logs --since 10m my-app # за последние 10 минут
docker logs -t my-app # с метками времениДля периода можно задать точные даты: docker logs --since 2026-10-25T10:00:00 --until 2026-10-25T11:00:00 my-app.
Фильтрация вывода
docker logs воспроизводит потоки stdout и stderr контейнера отдельно. Чтобы искать по обоим потокам, объедините их:
docker logs my-app 2>&1 | grep -i error
docker logs --since 1h my-app 2>&1 | grep -c "ERROR"Логи Docker Compose
docker compose logs # все сервисы
docker compose logs -f --tail 50 web # один сервис, живой вывод
docker compose logs --since 30m # за последние 30 минутГде хранятся файлы логов
docker inspect --format '{{.LogPath}}' my-appКоманда выводит путь к файлу на хосте, обычно /var/lib/docker/containers/<id>/<id>-json.log. Чтобы очистить файл без остановки контейнера:
truncate -s 0 "$(docker inspect --format '{{.LogPath}}' my-app)"Ограничить размер логов
Драйвер json-file по умолчанию пишет логи без ограничения, и один контейнер может занять весь диск. Включите ротацию.
Для одного контейнера:
docker run -d --name my-app --log-opt max-size=10m --log-opt max-file=3 nginx:alpineДля всех контейнеров, в файле /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}После правки перезапустите службу Docker: sudo systemctl restart docker. Настройки применяются только к новым контейнерам, существующие нужно пересоздать.
В файле Docker Compose:
services:
web:
image: nginx:alpine
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"Значения означают: файл вращается при достижении 10 МБ, хранится не более трёх файлов, то есть не больше 30 МБ на контейнер.
Частые вопросы
Почему docker logs пустой?
Приложение пишет логи в файл внутри контейнера, а не в stdout и stderr. В Docker принято писать в стандартные потоки. Для nginx и других программ это делают ссылки /var/log/nginx/access.log на /dev/stdout.
Как посмотреть логи остановленного контейнера?
Команда docker logs работает и для остановленных контейнеров, пока они не удалены (docker rm).
Почему не работает docker logs с драйвером journald или syslog?
Для некоторых драйверов чтение через docker logs не поддерживается: смотрите логи средствами самой системы, например journalctl CONTAINER_NAME=my-app.