Docker: разбор частых проблем
Контейнер перезапускается, порт занят, нет места, «permission denied», сервис не видит соседа — таблица симптомов и порядок разбора.
Обновлено 23 августа 2026 г.
Почти все проблемы с контейнерами сводятся к десятку типовых. Разбор всегда начинается с одних и тех же трёх команд.
Первые три команды
docker compose ps
docker compose logs --tail 100 <служба>
docker inspect -f '{{.State.Status}} {{.State.ExitCode}} {{.State.OOMKilled}} {{.State.Error}}' <контейнер>
Состояние, последние строки журнала и код выхода отвечают на большую часть вопросов. Дальше — по симптому.
Таблица симптомов
| Симптом | Вероятная причина | Что делать |
|---|---|---|
Постоянно Restarting | Приложение падает на старте | docker compose logs --tail 200, читать первую ошибку, а не последнюю |
Код выхода 137, OOMKilled: true | Не хватило памяти | Поднять лимит или найти утечку, см. ограничения ресурсов |
| Код выхода 1 сразу после старта | Ошибка в настройке или переменных | docker compose config — проверить подстановки |
port is already allocated | Порт занят другим процессом | sudo ss -tulpn | grep :<порт> |
no space left on device | Кончился диск или инод | df -h и df -i, см. место на диске |
permission denied на файле тома | Несовпадение UID | docker compose exec app id, затем chown или PUID/PGID |
| Приложение не видит базу | Разные сети или обращение к localhost | См. сети Docker |
Cannot connect to the Docker daemon | Служба не запущена или нет прав | sudo systemctl status docker, группа docker |
| Всё тормозит, нагрузка низкая | Упёрлись в диск | iostat -x 2, см. скорость диска |
Контейнер падает, а журнал пуст
Бывает, когда процесс умирает раньше, чем успевает что-то напечатать. Запустите образ вручную с оболочкой вместо основной команды:
docker run --rm -it --entrypoint sh <образ>
Внутри выполните команду запуска руками — ошибка появится на экране. Заодно проверьте, на месте ли файлы настроек:
docker compose run --rm app cat /app/config.yaml
Изменения не применяются
Классика: правите файл, перезапускаете, ничего не меняется.
docker compose config # видит ли Compose ваши правки
docker compose up -d --force-recreate app
docker compose exec app cat /etc/app/config.yaml
Причины обычно две: файл примонтирован не туда, куда вы думаете, или контейнер видит копию, попавшую внутрь образа при сборке.
Не чините проблему командой
docker system prune -a. Она удаляет неиспользуемые образы, сети, кеш сборки, а с ключом--volumes— и тома с данными. «Неиспользуемым» том становится сразу, как только контейнер остановлен. Сначала разберитесь, потом чистите.
Когда всё-таки чистить
docker system df
docker image prune
docker builder prune
docker container prune
docker system df покажет, что именно занимает место: образы, кеш сборки, тома или журналы контейнеров. Обычно виноват кеш сборки — его удаление безопасно.
Если машина не отвечает
SSH не подключается, сайт не открывается — обычно контейнер съел память и система ушла в подкачку. Заходите через консоль в панели машины. Для htop и btop нужен режим «Экран»: по текстовой линии размер окна не передаётся, там всегда 80×24.
free -h
sudo dmesg -T | tail -40
sudo systemctl restart docker
Если система вообще не грузится — переключите режим загрузки на диск восстановления SystemRescue во вкладке «Доступ»: машина перезагрузится в него, вход root без пароля, диск виден как /dev/sda. Оттуда можно смонтировать раздел и забрать данные.
Что проверять до, а не после
- Ограничение размера журналов задано — см. журналы контейнеров.
- Лимиты памяти проставлены всем службам.
- Версии образов зафиксированы, старый образ не удалён — см. обновление контейнеров.
- Копия данных существует и проверена — см. учебное восстановление.