Перейти к содержимому
VDS · Docker и контейнеры

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 на файле томаНесовпадение UIDdocker 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. Оттуда можно смонтировать раздел и забрать данные.

Что проверять до, а не после