Docker Troubleshooting — Решение типичных проблем
Эта страница содержит инструкции по диагностике и устранению наиболее распространённых проблем при работе с Docker и Docker Compose. Здесь описаны типичные ситуации: контейнер не запускается, сервис падает после старта, приложение недоступно или контейнеры не видят друг друга. Материал ориентирован на начинающих и показывает пошаговый подход к поиску и устранению проблем.
Общий алгоритм диагностики
Если сервис или контейнер работает неправильно, рекомендуется придерживаться следующего порядка проверки:
- проверить статус контейнеров
- проверить логи
- проверить состояние сети
- проверить использование ресурсов
- проверить конфигурацию Docker Compose
Этот подход помогает быстро определить источник проблемы.
Контейнер не запускается
Проверить статус контейнеров
docker compose ps
Пример вывода:
NAME STATUS
project_php Exited (1)
project_nginx Up
Если контейнер имеет статус:
Exited
это означает, что приложение внутри контейнера завершилось с ошибкой.
Проверить логи контейнера
docker compose logs <service>
Пример:
docker compose logs php
Часто в логах можно увидеть причину проблемы:
- ошибка конфигурации
- отсутствующий файл
- ошибка подключения к базе данных
- неправильные переменные окружения
Контейнер постоянно перезапускается
Иногда контейнер запускается, но сразу падает и перезапускается.
Проверить статус:
docker ps
Пример:
Restarting (1) 10 seconds ago
Посмотреть логи в реальном времени
docker compose logs -f <service>
Это позволит увидеть, на каком этапе происходит ошибка.
Порт уже используется
Ошибка запуска контейнера может выглядеть так:
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 <service> ls /var/www/app
Возможные причины
- неправильный путь к папке
- проблемы с правами доступа
- файлы редактируются не в той директории
Контейнеры не видят друг друга
Если сервисы не могут взаимодействовать:
например:
php -> mysql
Проверить сеть
docker network ls
Проверить подключенные контейнеры
docker network inspect <network>
Проверить соединение внутри контейнера
docker compose exec php ping mysql
Если соединение не работает — возможно сервис не запущен или контейнеры находятся в разных сетях.
Контейнер завис
Иногда контейнер перестаёт реагировать на команды.
Попробовать перезапустить:
docker restart <container>
Если это не помогает:
docker kill <container>
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 <network>
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 <service> # логи сервиса
docker compose logs -f <service> # логи в реальном времени
docker restart <container> # перезапуск контейнера
docker kill <container> # принудительная остановка
docker network inspect <network> # проверка сети
docker stats # использование ресурсов
docker system df # использование диска
docker system prune -f # очистка Docker
docker compose config # проверка конфигурации
Итог
Большинство проблем Docker можно диагностировать с помощью нескольких команд:
docker compose psdocker compose logsdocker statsdocker network inspectdocker compose config
Последовательное использование этих инструментов позволяет быстро определить источник проблемы и восстановить работу контейнеров.
No comments to display
No comments to display