Skip to content
VDS · Docker і контейнери

Docker: діагностика типових проблем

Контейнер перезапускається, порт зайнятий, місця не залишилося, «permission denied», сервіс не бачить сусіда — таблиця симптомів і процедура діагностики.

Оновлено 23 серпня 2026 р.

Майже всі проблеми з контейнерами зводяться до десятка типових. Діагностика завжди починається з тих самих трьох команд.

Перші три команди

docker compose ps
docker compose logs --tail 100 <service>
docker inspect -f '{{.State.Status}} {{.State.ExitCode}} {{.State.OOMKilled}} {{.State.Error}}' <container>

Статус, останні рядки логу та код виходу відповідають на більшість питань. Далі працюйте від симптому.

Таблиця симптомів

СимптомЙмовірна причинаЩо робити
Постійно RestartingЗастосунок падає під час запускуdocker compose logs --tail 200, читайте першу помилку, а не останню
Код виходу 137, OOMKilled: trueБракує пам'ятіЗбільште ліміт або знайдіть витік, див. обмеження ресурсів
Код виходу 1 одразу після запускуПомилка в конфігурації або зміннихdocker compose config — перевірте підстановки
port is already allocatedПорт зайнятий іншим процесомsudo ss -tulpn | grep :<port>
no space left on deviceЗабракло місця на диску або inodedf -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 <image>

Усередині виконайте команду запуску вручну — помилка з'явиться на екрані. Заодно перевірте, чи на місці файли конфігурації:

docker compose run --rm app cat /app/config.yaml

Зміни не застосовуються

Класика: ви редагуєте файл, перезапускаєте — і нічого не змінюється.

docker compose config          # does Compose see your changes
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 не підключається, сайт не відкривається — зазвичай контейнер з'їв пам'ять, і система пішла в swap. Заходьте через консоль у панелі машини. Для htop і btop потрібен режим «Screen»: розмір вікна не передається текстовим рядком, тож він завжди 80×24.

free -h
sudo dmesg -T | tail -40
sudo systemctl restart docker

Якщо система взагалі не завантажується, перемкніть режим завантаження на рятувальний диск SystemRescue у вкладці «Доступ»: машина перезавантажиться в нього, вхід під root без пароля, а диск буде видно як /dev/sda. Звідти можна змонтувати розділ і забрати дані.

Що перевірити до, а не після