Пошук уроків, статей та іншого контенту
Дізнайтеся, як читати журнали контейнера та досліджувати його конфігурацію, стан, мережу й змонтовані ресурси.
logs та inspectКоли контейнер працює не так, як очікується, зазвичай потрібно з’ясувати:
які повідомлення вивела програма;
чи працює контейнер зараз;
з яким кодом він завершився;
які порти та мережі налаштовані;
які каталоги змонтовані;
з яким образом і параметрами його запустили.
Для цього Docker має дві основні команди:
docker logs — перегляд журналів контейнера;
docker inspect — детальна інформація про конфігурацію та стан об’єкта Docker.
Запустимо контейнер із вебсервером Nginx:
docker run --name demo-web -d -p 8080:80 nginxПояснення параметрів:
--name demo-web — ім’я контейнера;
-d — запуск у фоновому режимі;
-p 8080:80 — перенаправлення порту 8080 хоста на порт 80 контейнера;
nginx — образ, з якого створюється контейнер.
Переконаємося, що контейнер працює:
docker psЩоб Nginx створив записи в журналі доступу, відкрийте в браузері адресу:
http://localhost:8080Також можна виконати запит командою curl, якщо вона встановлена у вашій системі:
curl http://localhost:8080docker logs demo-webКоманда виведе повідомлення, які головний процес контейнера записав у стандартні потоки виведення:
stdout — стандартне виведення;
stderr — потік повідомлень про помилки.
Docker зберігає ці повідомлення, тому їх можна переглянути навіть після завершення контейнера.
Команда також може бути записана у формі:
docker container logs demo-webОбидва варіанти виконують ту саму дію.
Якщо журнал великий, зручно вивести лише останні записи:
docker logs --tail 20 demo-webЧисло 20 означає кількість останніх рядків.
Вивести лише останні 5 рядків:
docker logs --tail 5 demo-webПараметр --follow або короткий варіант -f залишає команду активною та показує нові записи, щойно вони з’являються:
docker logs -f demo-webТепер кожен новий HTTP-запит до контейнера може з’явитися в терміналі.
Щоб припинити перегляд журналу, натисніть Ctrl+C. Це зупинить саме команду docker logs, але не контейнер.
Зручно одночасно показати кілька останніх рядків і продовжити стеження:
docker logs --tail 20 --follow demo-webПараметр --timestamps додає час до кожного запису:
docker logs --timestamps demo-webЦе корисно, коли потрібно зрозуміти порядок подій або порівняти записи з іншими подіями в системі.
Показати записи, створені за останні 10 хвилин:
docker logs --since 10m demo-webПоказати записи, створені після певного моменту:
docker logs --since 2026-09-02T10:00:00 demo-webМожна поєднувати параметри:
docker logs --since 10m --tail 50 demo-webУ цьому випадку Docker вибере записи за останні 10 хвилин, але покаже не більше 50 останніх рядків.
inspectКоманда docker inspect показує детальний опис об’єкта Docker у форматі JSON:
docker inspect demo-webУ результаті можна знайти:
ідентифікатор контейнера;
використаний образ;
команду запуску;
змінні середовища;
стан контейнера;
налаштування портів;
мережеві параметри;
змонтовані ресурси;
час створення та запуску.
Вивід може бути дуже великим, тому зазвичай використовують форматування для отримання конкретного поля.
Отримати весь об’єкт стану:
docker inspect --format='{{json .State}}' demo-webУ ньому можуть бути такі дані:
Status — поточний статус, наприклад running або exited;
Running — чи працює контейнер;
StartedAt — час запуску;
FinishedAt — час завершення;
ExitCode — код завершення процесу;
Error — повідомлення про помилку, якщо вона виникла.
Отримати лише статус:
docker inspect --format='{{.State.Status}}' demo-webПриклад результату:
runningПеревірити, чи працює контейнер:
docker inspect --format='{{.State.Running}}' demo-webМожливий результат:
trueОтримати код завершення:
docker inspect --format='{{.State.ExitCode}}' demo-webДля контейнера, який досі працює, код зазвичай дорівнює 0, але важливіше перевіряти поле Running і поточний статус.
docker inspect --format='{{.Config.Image}}' demo-webРезультат:
nginxПоказати команду, яку Docker запускає всередині контейнера:
docker inspect --format='{{json .Config.Cmd}}' demo-webПоказати точку входу образу:
docker inspect --format='{{json .Config.Entrypoint}}' demo-webCmd і Entrypoint є різними частинами конфігурації запуску. Для початкової діагностики корисно подивитися на них разом:
docker inspect --format='Entrypoint: {{json .Config.Entrypoint}}{{println}}{{.Config.Cmd}}' demo-webПереглянути змінні середовища контейнера:
docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' demo-webТакий вивід може містити службові або конфіденційні значення. Не публікуйте його без перевірки.
Отримати інформацію про зіставлення портів:
docker inspect --format='{{json .NetworkSettings.Ports}}' demo-webПриблизний результат:
{"80/tcp":[{"HostIp":"0.0.0.0","HostPort":"8080"}]}Це означає, що порт 80 контейнера доступний через порт 8080 хоста.
Список опублікованих портів у більш компактному вигляді можна отримати так:
docker port demo-webПриклад результату:
80/tcp -> 0.0.0.0:8080Показати IP-адресу контейнера в його мережі:
docker inspect --format='{{range .NetworkSettings.Networks}}{{println .IPAddress}}{{end}}' demo-webПоказати назви мереж, до яких підключено контейнер:
docker inspect --format='{{range $name, $network := .NetworkSettings.Networks}}{{println $name}}{{end}}' demo-webПоказати деталі мережевого підключення у форматі JSON:
docker inspect --format='{{json .NetworkSettings.Networks}}' demo-webIP-адреса контейнера використовується всередині Docker-мережі. Для доступу з хоста зазвичай використовують опублікований порт, наприклад localhost:8080.
Змонтовані каталоги та томи описані в полі Mounts:
docker inspect --format='{{json .Mounts}}' demo-webДля зручнішого читання можна вивести основні поля кожного монтування:
docker inspect --format='{{range .Mounts}}{{println "Тип:" .Type "Джерело:" .Source "Призначення:" .Destination}}{{end}}' demo-webМожливий результат для контейнера без змонтованих ресурсів буде порожнім.
Поле Destination показує шлях усередині контейнера. Наприклад, якщо каталог хоста змонтовано в /usr/share/nginx/html, саме там контейнер побачить його вміст.
Припустімо, вебзастосунок не відповідає. Послідовність перевірки може бути такою:
docker ps -aКлюч -a показує не лише активні, а й зупинені контейнери.
docker inspect --format='Status: {{.State.Status}}{{println}}Running: {{.State.Running}}{{println}}Exit code: {{.State.ExitCode}}' demo-webdocker logs --tail 50 --timestamps demo-webdocker port demo-webdocker logs -f demo-webЦі команди допомагають розділити різні проблеми:
контейнер не запущений;
головний процес завершився;
програма вивела помилку;
порт не опублікований;
запит надходить не на той порт;
потрібний каталог не змонтований.
logs та inspect у скриптахРезультат inspect можна використовувати в shell-скриптах:
container_name=demo-web
status=$(docker inspect --format='{{.State.Status}}' "$container_name")
if [ "$status" = "running" ]; then
echo "Контейнер працює"
else
echo "Контейнер має статус: $status"
docker logs --tail 20 "$container_name"
fiУ цьому прикладі:
зберігається ім’я контейнера;
через docker inspect отримується його статус;
якщо контейнер не працює, виводяться останні 20 рядків журналу.
docker logs із файлами журналів усередині контейнераdocker logs показує дані, які головний процес записав у stdout і stderr. Він не читає автоматично всі файли журналів усередині контейнера.
Якщо програма записує журнал лише у файл, його може не бути у виводі docker logs.
Якщо Docker не знаходить контейнер, перевірте імена:
docker ps -a --format '{{.Names}}'Після цього використовуйте точне ім’я або ідентифікатор контейнера.
Ctrl+C зупиняє контейнерПід час виконання:
docker logs -f demo-webнатискання Ctrl+C припиняє стеження за журналом, але не зупиняє demo-web.
Для зупинки контейнера потрібна окрема команда:
docker stop demo-webКоманда:
docker psпоказує лише активні контейнери. Якщо контейнер завершився через помилку, використовуйте:
docker ps -aПісля цього перегляньте його журнали:
docker logs demo-webdocker inspectБез параметра --format команда виводить великий JSON-об’єкт. Для конкретного значення краще одразу вказувати потрібне поле, наприклад:
docker inspect --format='{{.State.Status}}' demo-webIP-адреса контейнера може змінитися після його повторного створення. Для доступу з хоста використовуйте опублікований порт, а не покладайтеся на конкретну внутрішню IP-адресу.
docker logs <container> показує журнали контейнера.
--tail обмежує кількість рядків.
-f або --follow показує нові записи в реальному часі.
--timestamps додає часові мітки.
--since і --until обмежують журнали часовим інтервалом.
docker inspect <container> показує детальну конфігурацію та стан контейнера.
Через --format можна отримати лише потрібне поле.
У inspect можна перевірити статус, код завершення, образ, команду, порти, мережі та змонтовані ресурси.
Для діагностики спочатку перевіряйте docker ps -a, потім стан через inspect, а після цього журнали через docker logs.