Мы уже умеем создавать контейнеры в Docker. Но развернуть работающее окружение это только пол задачи, его еще надо обслуживать, поддерживая в рабочем состоянии. Как и в любом администрировании, главный источник информации о состоянии системы – это ее логи.
Docker не исключение, и предоставляет доступ к логам контейнеров. Давайте разберемся, как это сделать, используя встроенные средства Docker.
- 1. Запуск контейнера с настройками логирования
- 2. Просмотр логов контейнера
- 3. Пример анализа логов
- 4. Мониторинг использования ресурсов контейнером
- 5. Получение внутренней информации о контейнере
1. Запуск контейнера с настройками логирования
Мы в прошлых статьях уже использовали в качестве примера контейнер с nginx, он отлично подойдет и для демонстрации логирования.
Давайте создадим и запустим новый контейнер nginx и зададим параметры для логирования:
[root@waky ~]# docker run -d --name nginx_container -p 8080:80 --log-driver=json-file --log-opt max-size=5m --log-opt max-file=3 nginx
3baf6832bbf0df5075dea34fc82a2268d552e96b1df192d8e1dc88e748e9178e
[root@waky ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3baf6832bbf0 nginx "/docker-entrypoint.…" 18 seconds ago Up 17 seconds 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp nginx_container
[root@waky ~]#
Использованные параметры запуска:
-d — запуск в фоновом режиме
–name nginx_container — имя контейнера
-p 8080:80 — проброс порта для доступа к nginx
–log-driver=json-file — используем стандартный драйвер логов Docker
–log-opt max-size=5m — размер файла логов не более 5 Mb
–log-opt max-file=3 — хранить не более 3 файлов логов, старые перезаписываются
2. Просмотр логов контейнера
Чтобы посмотреть текущие логи внутри контейнера, используем команду logs:
[root@waky ~]# docker logs nginx_container
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2025/11/04 04:12:45 [notice] 1#1: using the "epoll" event method
2025/11/04 04:12:45 [notice] 1#1: nginx/1.29.2
2025/11/04 04:12:45 [notice] 1#1: built by gcc 14.2.0 (Debian 14.2.0-19)
2025/11/04 04:12:45 [notice] 1#1: OS: Linux 5.14.0-592.el9.x86_64
2025/11/04 04:12:45 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1073741816:1073741816
2025/11/04 04:12:45 [notice] 1#1: start worker processes
2025/11/04 04:12:45 [notice] 1#1: start worker process 29
[root@waky ~]#
Эта команда покажет всё, что записано в логах, как видно, здесь пока только логи запуска самого контейнера. Если по какой либо причине контейнер падает с ошибкой на старте, в этих логах вы найдете причину.
Давайте, с помощью curl, сделаем пару обращений к веб серверу, работающему в контейнере, и проверим, что попадет в логи контейнера. Вывод логов ограничим с командой tail:
[root@waky ~]# curl --silent 'localhost:8080/' > /dev/null
[root@waky ~]# curl --silent 'localhost:8080/not_exist/' > /dev/null
[root@waky ~]# docker logs nginx_container | tail -n 2
2025/11/04 04:12:45 [notice] 1#1: using the "epoll" event method
2025/11/04 04:12:45 [notice] 1#1: nginx/1.29.2
2025/11/04 04:12:45 [notice] 1#1: built by gcc 14.2.0 (Debian 14.2.0-19)
2025/11/04 04:12:45 [notice] 1#1: OS: Linux 5.14.0-592.el9.x86_64
2025/11/04 04:12:45 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1073741816:1073741816
2025/11/04 04:12:45 [notice] 1#1: start worker processes
2025/11/04 04:12:45 [notice] 1#1: start worker process 29
2025/11/04 04:25:50 [error] 29#29: *5 "/usr/share/nginx/html/not_exist/index.html" is not found (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /not_exist/ HTTP/1.1", host: "localhost:8080"
172.17.0.1 - - [04/Nov/2025:04:25:34 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.76.1" "-"
172.17.0.1 - - [04/Nov/2025:04:25:50 +0000] "GET /not_exist/ HTTP/1.1" 404 153 "-" "curl/7.76.1" "-"
[root@waky ~]#
Видим, наши два запроса попали в access логи nginx, а так же залогирована ошибка отсутствия файла, так как мы обратились по заведомо неработающей ссылке /not_exist/.
Если нужно следить за новыми записями в логах в режиме реального времени, используйте -f (подобно tail -f):
[root@waky ~]# docker logs -f nginx_container
3. Пример анализа логов
Используя утилиту grep мы можем искать интересующую нас информацию в логах контейнера.
Допустим, вы хотите узнать, были ли обращения к несуществующим страницам:
[root@waky ~]# docker logs nginx_container | grep "GET" | grep " 404 "
172.17.0.1 - - [04/Nov/2025:04:25:50 +0000] "GET /not_exist/ HTTP/1.1" 404 153 "-" "curl/7.76.1" "-"
[root@waky ~]#
Для анализа логов внутри контейнера подходят все те же команды, которые используются с обычным NGINX.
4. Мониторинг использования ресурсов контейнером
Для оценки загрузки контейнера nginx используйте команду stats:
[root@waky ~]# docker stats nginx_container
Она покажет в реальном времени CPU, память, сетевой трафик и диск I/O. Например:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
3baf6832bbf0 nginx_container 0.00% 14.85MiB / 1.667GiB 0.87% 4.54kB / 5.72kB 27.4MB / 16.4kB 2
Это помогает понять, насколько загружен сервер nginx.
5. Получение внутренней информации о контейнере
Команда inspect даёт подробное описание конфигурации и состояния контейнера:
[root@waky ~]# docker inspect nginx_container
[
{
"Id": "3baf6832bbf0df5075dea34fc82a2268d552e96b1df192d8e1dc88e748e9178e",
"Created": "2025-11-04T04:12:44.141800564Z",
"Path": "/docker-entrypoint.sh",
"Args": [
"nginx",
"-g",
"daemon off;"
],
"State": {
"Status": "running",
…
[root@waky ~]#
Анализируя вывод, можно узнать IP-адрес, порты, переменные окружения и другие настройки.
Заключение
Используя встроенные средства Docker, вы можете:
- Просматривать логи прямо командой docker logs
- Настраивать ограничения по размеру лог-файлов
- Следить за нагрузкой с помощью docker stats
- Получать подробную информацию командой docker inspect
Встроенные инструменты Docker — простое и эффективное решение для базового мониторинга и логирования, позволяющее выявить причины большинства ошибок и проблем.
Знание этих инструментов и умение их применять, важно для любого администратора.