Skip to main content

Docker Debug Flow — Что делать, если контейнер не работает

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


Общий принцип диагностики

Большинство проблем с Docker можно найти, последовательно проверив:

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

Чаще всего проблема обнаруживается уже на втором шаге — в логах.


Шаг 1 — Проверить контейнеры

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

docker compose ps

или

docker ps

Пример результата:

NAME         STATUS
site_nginx   Up
site_php     Exited (1)
site_mysql   Up

Если контейнер имеет статус:

Exited

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


Шаг 2 — Проверить логи

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

docker compose logs <service>

Пример:

docker compose logs php

Если контейнер только что перезапустился, удобно смотреть логи в реальном времени:

docker compose logs -f php

Шаг 3 — Проверить порты

Если сервис работает, но недоступен извне, нужно проверить проброс портов.

docker ps

Пример:

0.0.0.0:8080->80/tcp

Это означает:

сервер:8080 → контейнер:80

Если порт не указан — он не открыт наружу.


Шаг 4 — Проверить сеть контейнеров

Если сервисы не видят друг друга, нужно проверить Docker-сети.

docker network ls

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

docker network inspect <network>

Шаг 5 — Проверить соединение внутри контейнера

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

docker compose exec <service> sh

После этого можно проверить соединение.

Пример проверки базы данных:

ping mysql

или

nc -zv mysql 3306

Шаг 6 — Проверить ресурсы

Если сервер перегружен, контейнеры могут работать нестабильно.

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

docker stats

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

docker system df

Шаг 7 — Проверить конфигурацию Compose

Ошибки в docker-compose.yml могут привести к неправильному запуску контейнеров.

Проверить конфигурацию:

docker compose config

Эта команда покажет итоговую конфигурацию после обработки переменных.


Частые причины проблем

Ошибка в конфигурации

Неправильный YAML или пропущенная переменная.

Решение:

docker compose config

Порт уже используется

Ошибка:

Bind for 0.0.0.0:80 failed

Проверить процесс:

sudo lsof -i :80

Контейнер падает после запуска

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

docker compose logs

Контейнеры не видят друг друга

Проверить сеть:

docker network inspect <network>

Закончился диск

Проверить:

docker system df

Очистить Docker:

docker system prune -f

Быстрый алгоритм диагностики

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

2 Проверить логи
docker compose logs

3 Проверить порты
docker ps

4 Проверить сеть
docker network inspect

5 Проверить ресурсы
docker stats

6 Проверить конфигурацию
docker compose config

Мини-чеклист диагностики

Если сервис не работает:

  • контейнер запущен?
  • есть ли ошибки в логах?
  • открыт ли нужный порт?
  • контейнеры находятся в одной сети?
  • хватает ли ресурсов серверу?
  • правильная ли конфигурация Compose?