Skip to main content

Docker — Отладка контейнеров

Эта страница объясняет основные команды Docker, которые используются для диагностики и отладки контейнеров. Здесь разобраны способы посмотреть запущенные контейнеры, проверить их состояние, изучить логи, подключиться внутрь контейнера и выполнить команды для анализа проблемы. Материал рассчитан на начинающих и помогает быстро понять, что происходит внутри контейнера, если приложение работает некорректно.


Когда используется отладка контейнеров

На практике команды из этой страницы используются в следующих ситуациях:

  • контейнер не запускается
  • сервис падает после старта
  • приложение возвращает ошибки
  • сервис не отвечает
  • контейнер постоянно перезапускается
  • нужно проверить что происходит внутри контейнера

Типичный порядок диагностики:

  1. проверить список контейнеров
  2. проверить статус контейнера
  3. посмотреть логи
  4. зайти внутрь контейнера
  5. проверить процессы или выполнить команды

Просмотр контейнеров


Показать

Контейнерыконтейнеры текущего проекта

docker compose ps

Команда показывает контейнеры, которые относятся к текущему docker-compose проекту.

Пример вывода:

NAME                IMAGE          STATUS        PORTS
project_nginx       nginx:latest   Up 2 hours    0.0.0.0:80->80/tcp
project_php         php:8.2-fpm    Up 2 hours

Что здесь можно увидеть

  • имя контейнера
  • используемый образ
  • статус контейнера
  • проброшенные порты

Когда использовать

Это первая команда, которую стоит выполнить, если нужно проверить:

  • запущен ли сервис
  • работает ли контейнер
  • не упал ли он

Все

Показать все запущенные контейнеры

docker ps

Эта

Всекоманда показывает все запущенные контейнеры в системе, независимо от проекта.

Пример:

CONTAINER ID   IMAGE         STATUS         PORTS
ab12cd34       nginx         Up 2 hours     80/tcp
cd34ef56       redis         Up 3 hours     6379/tcp

Чем отличается от docker compose ps

КомандаПоказывает
docker compose psконтейнеры текущего проекта
docker psвсе контейнеры на сервере

Показать все контейнеры (включая остановленные

остановленные)
docker ps -a

Показывает:

  • работающие контейнеры
  • остановленные контейнеры
  • контейнеры с ошибками

Пример статуса:

Exited (1) 5 minutes ago

Что это означает

Контейнер запустился, но приложение внутри завершилось с ошибкой.

В таком случае следующим шагом нужно посмотреть логи.


Табличный вывод

формат вывода
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

Этот формат удобен, если нужно быстро увидеть:

  • ID контейнера
  • имя
  • статус
  • порты

Пример вывода:

CONTAINER ID   NAMENAMES         STATUS          PORTS
ab12cd343acb1234       nginxproject_php   Up 210 hoursminutes
7d8e5678       project_nginx Up 10 minutes   80/tcp

ЛогиПросмотр логов контейнеров

Логи — это основной источник информации при отладке.

Именно здесь можно увидеть:

  • ошибки приложения
  • ошибки запуска
  • проблемы подключения к базе
  • ошибки конфигурации

Просмотр логов

 сервиса
docker compose logs <service>

Пример:

docker compose logs nginx

Вывод покажет весь лог контейнера.


Логи

Просмотр логов в реальном времени

docker compose logs -f <service>

Флаг -f означает follow — следить за логом в реальном времени.

Пример:

docker compose logs -f php

Это удобно, если:

  • вы только что перезапустили сервис
  • нужно увидеть новые ошибки

Выход из режима просмотра:

CTRL + C

Последние

Показать последние строки логов

docker compose logs --tail=100 <service>

Показывает только последние 100 строк.

Пример:

docker compose logs --tail=100 nginx

Когда использовать

Если контейнер работает давно и лог очень большой.


Логи с timestamp

временными метками
docker compose logs --timestamps <service>

Пример:

docker compose logs --timestamps php

Вывод будет выглядеть примерно так:

2026-03-11T12:32:10 app started
2026-03-11T12:32:11 connected to database

Это удобно для анализа событий во времени.


Подключение внутрь контейнера

Shell

Иногда внутридля диагностики нужно зайти внутрь контейнера

, чтобы:

  • посмотреть файлы
  • проверить конфигурацию
  • выполнить команды
  • проверить сетевые подключения

Подключиться через shell

docker compose exec <service> sh

илиПример:

docker compose exec php sh

После выполнения команды вы окажетесь внутри контейнера.


Использование bash

Если в контейнере установлен bash, можно использовать:

docker compose exec <service> bash

Пример:

docker compose exec php bash

Важно: Не во всех контейнерах есть bash. Многие минимальные образы используют только sh.


Проверить файлы внутри контейнера

После входа можно выполнять обычные команды Linux:

ls
cd
cat
ps
top

Например:

ls /var/www/html

ПроцессыПросмотр процессов внутри контейнера

docker compose top <service>

ПоказываетПример:

docker compose top php

Команда показывает список процессов.процессов внутри контейнера.

Пример вывода:

UID     PID     CMD
root    123     php-fpm

Когда использовать

Полезно, если:

  • приложение зависло
  • нужно проверить, запущен ли процесс
  • нужно убедиться, что сервис действительно работает

Дополнительные полезные команды

ЗапускВыполнение команды внутри контейнера

Можно выполнить команду без входа в shell.

Формат:

docker compose exec <service> <command>

Пример:

docker compose exec php php -v

Вывод:

PHP 8.2.4 (cli)

Ещё примеры

Проверить установленные пакеты:

docker compose exec php composer --version

Проверить Node.js:

docker compose exec node node -v

Копирование файлов

 из контейнера

ИзИногда контейнера:нужно забрать файл из контейнера.


Копирование файла из контейнера

docker cp container:/path/file .

ВПример:

контейнер:
docker cp project_php:/var/log/php.log .

Файл будет скопирован в текущую папку.


Копирование файла в контейнер

docker cp file container:/path/

Пример:

docker cp config.php project_php:/var/www/config.php

Типичный сценарий диагностики

Если сервис не работает, обычно делают следующее:

1 Проверить контейнеры

docker compose ps

2 Проверить логи

docker compose logs --tail=100

3 Если ошибка не очевидна — подключиться внутрь

docker compose exec php sh

4 Проверить процессы

docker compose top php

5 Проверить приложение вручную

Например:

curl localhost

Полезные советы для новичков

Всегда начинайте диагностику с логов

В большинстве случаев ошибка уже записана в лог.


Не путайте контейнер и сервис

В Compose:

  • service — описание контейнера в docker-compose.yml
  • container — фактически запущенный экземпляр

Проверяйте статус контейнера

Если статус:

Exited

контейнер уже остановился, и нужно смотреть логи.


Краткая памятка

docker compose ps                          # контейнеры текущего проекта
docker ps                                  # все запущенные контейнеры
docker ps -a                               # все контейнеры включая остановленные

docker compose logs <service>              # логи сервиса
docker compose logs -f <service>           # логи в реальном времени
docker compose logs --tail=100 <service>   # последние строки логов
docker compose logs --timestamps <service> # логи с временными метками

docker compose exec <service> sh           # войти в контейнер
docker compose exec <service> bash         # войти через bash
docker compose exec <service> <command>    # выполнить команду

docker compose top <service>               # процессы контейнера

docker cp container:/path/file .           # копировать из контейнера
docker cp file container:/path/            # копировать в контейнер