Глава 5 — Решение проблем Docker Troubleshooting — Решение типичных проблем Эта страница содержит инструкции по диагностике и устранению наиболее распространённых проблем при работе с Docker и Docker Compose. Здесь описаны типичные ситуации: контейнер не запускается, сервис падает после старта, приложение недоступно или контейнеры не видят друг друга. Материал ориентирован на начинающих и показывает пошаговый подход к поиску и устранению проблем . Общий алгоритм диагностики Если сервис или контейнер работает неправильно, рекомендуется придерживаться следующего порядка проверки: проверить статус контейнеров проверить логи проверить состояние сети проверить использование ресурсов проверить конфигурацию Docker Compose Этот подход помогает быстро определить источник проблемы. Контейнер не запускается Проверить статус контейнеров docker compose ps Пример вывода: NAME STATUS project_php Exited (1) project_nginx Up Если контейнер имеет статус: Exited это означает, что приложение внутри контейнера завершилось с ошибкой. Проверить логи контейнера docker compose logs Пример: docker compose logs php Часто в логах можно увидеть причину проблемы: ошибка конфигурации отсутствующий файл ошибка подключения к базе данных неправильные переменные окружения Контейнер постоянно перезапускается Иногда контейнер запускается, но сразу падает и перезапускается. Проверить статус: docker ps Пример: Restarting (1) 10 seconds ago Посмотреть логи в реальном времени docker compose logs -f Это позволит увидеть, на каком этапе происходит ошибка. Порт уже используется Ошибка запуска контейнера может выглядеть так: Bind for 0.0.0.0:80 failed: port is already allocated Это означает, что порт уже используется другим процессом. Проверить, кто использует порт sudo lsof -i :80 или netstat -tulpn | grep 80 Возможные решения остановить другой сервис изменить порт в docker-compose.yml Пример изменения порта: ports: - "8080:80" Изменения в Dockerfile не применяются Docker активно использует кэш при сборке образов. Иногда это приводит к тому, что изменения не применяются. Пересобрать образ без кэша docker compose build --no-cache После этого нужно запустить контейнеры: docker compose up -d Контейнер не видит изменения файлов Если используется volume для подключения кода: volumes: - ./app:/var/www/app иногда изменения в коде могут не применяться. Проверить содержимое внутри контейнера docker compose exec ls /var/www/app Возможные причины неправильный путь к папке проблемы с правами доступа файлы редактируются не в той директории Контейнеры не видят друг друга Если сервисы не могут взаимодействовать: например: php -> mysql Проверить сеть docker network ls Проверить подключенные контейнеры docker network inspect Проверить соединение внутри контейнера docker compose exec php ping mysql Если соединение не работает — возможно сервис не запущен или контейнеры находятся в разных сетях. Контейнер завис Иногда контейнер перестаёт реагировать на команды. Попробовать перезапустить: docker restart Если это не помогает: docker kill Docker занимает слишком много места Со временем Docker может занимать большое количество дискового пространства. Проверить использование: docker system df Очистить неиспользуемые ресурсы docker system prune -f Очистить volumes docker volume prune -f Важно: Перед удалением volumes убедитесь, что они не содержат важных данных. Контейнер не отвечает по HTTP Если сайт или API не открывается: Проверить контейнеры docker compose ps Проверить проброс портов docker ps Пример: 0.0.0.0:8080->80/tcp Проверить доступ внутри контейнера docker compose exec nginx curl localhost Если внутри контейнера всё работает — проблема может быть в сетевых настройках. Проверка конфигурации Docker Compose Перед запуском полезно проверить итоговую конфигурацию: docker compose config Команда показывает: итоговый YAML подставленные переменные окружения конфигурацию сервисов Это помогает обнаружить: ошибки YAML пропущенные переменные неправильные настройки сервисов Быстрая диагностика (чеклист) Если сервис не работает: 1 Проверить контейнеры docker compose ps 2 Проверить логи docker compose logs --tail=100 3 Проверить ресурсы docker stats 4 Проверить сеть docker network inspect 5 Проверить конфигурацию docker compose config Частые ошибки новичков Запуск Docker-команд не из директории проекта Если команда docker compose выполняется не там, где лежит docker-compose.yml , Docker не сможет найти конфигурацию. Неправильные имена сервисов В Docker Compose используется имя сервиса , а не имя контейнера. Пример правильного имени: mysql Отсутствие .env файла Если в docker-compose.yml используются переменные окружения, но файл .env отсутствует, сервис может не запуститься. Краткая памятка docker compose ps # статус контейнеров docker compose logs # логи сервиса docker compose logs -f # логи в реальном времени docker restart # перезапуск контейнера docker kill # принудительная остановка docker network inspect # проверка сети docker stats # использование ресурсов docker system df # использование диска docker system prune -f # очистка Docker docker compose config # проверка конфигурации Итог Большинство проблем Docker можно диагностировать с помощью нескольких команд: docker compose ps docker compose logs docker stats docker network inspect docker compose config Последовательное использование этих инструментов позволяет быстро определить источник проблемы и восстановить работу контейнеров. 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 Пример: 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 Шаг 5 — Проверить соединение внутри контейнера Иногда нужно зайти внутрь контейнера. docker compose exec 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 Закончился диск Проверить: 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?