Docker Debug Flow — Что делать, если контейнер не работает
Эта страница описывает пошаговый алгоритм диагностики Docker-контейнеров. Она помогает быстро определить причину проблемы, если контейнер не запускается, сервис недоступен или приложение работает некорректно. Материал ориентирован на начинающих и представляет собой универсальный чеклист диагностики Docker-проблем.
Общий принцип диагностики
Большинство проблем с Docker можно найти, последовательно проверив:
- статус контейнеров
- логи контейнеров
- сетевые настройки
- использование ресурсов
- конфигурацию 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?
No comments to display
No comments to display