Ошибка 1: Контейнер мгновенно завершается
Симптом: запускаете
docker run ubuntu, контейнер сразу переходит в Exited.
Причина: контейнер завершается вместе с PID 1. У ubuntu нет вечного процесса по умолчанию.
# Терминал
# Неверно (мгновенно завершится)
docker run ubuntu
# Верно — передаём долгоживущую задачу
docker run -d --name myubuntu ubuntu tail -f /dev/null
# Или интерактивный режим
docker run -it ubuntu bash
Ошибка 2: docker attach + Ctrl+C = контейнер остановлен
Симптом: подключились к nginx через
docker attach, нажали Ctrl+C — nginx остановился.
Причина: attach подключается к PID 1. Ctrl+C посылает SIGINT этому процессу, nginx завершается.
# Терминал
# Опасно (Ctrl+C остановит контейнер)
docker attach mynginx
# Безопасно (новый процесс, Ctrl+C не затронет PID 1)
docker exec -it mynginx bash
# Если случайно остановили через attach — перезапустить:
docker start mynginx
Ошибка 3: Данные потеряны после docker rm
Симптом: удалили контейнер, все изменения внутри (файлы, БД) потеряны.
Причина: файловая система контейнера — временная. При docker rm она уничтожается.
# Терминал
# Данные внутри контейнера — временные
docker run -d --name mydb postgres
# ... записали данные ...
docker rm -f mydb
# Все данные потеряны!
# Решение: монтировать volume для персистентных данных
docker run -d --name mydb -v pgdata:/var/lib/postgresql/data postgres
# Теперь данные хранятся в volume pgdata
# При пересоздании контейнера данные сохраняются:
docker rm -f mydb
docker run -d --name mydb -v pgdata:/var/lib/postgresql/data postgres
# Данные на месте!
# Управление volumes
docker volume ls
docker volume inspect pgdata
Ошибка 4: «Cannot remove a running container»
Симптом:
docker rm mynginx выдаёт ошибку «cannot remove a running container».
# Терминал
# Неверно (контейнер работает)
docker rm mynginx
# Error: Cannot remove a running container...
# Верно — сначала остановить
docker stop mynginx
docker rm mynginx
# Или принудительно одной командой
docker rm -f mynginx
Ошибка 5: «image is being used by stopped container» при rmi
Симптом:
docker rmi nginx выдаёт ошибку «image is being used».
# Терминал
# Ошибка: образ используется контейнером (даже остановленным)
docker rmi nginx
# Error: image is being used by stopped container...
# Найти все контейнеры, использующие образ
docker ps -a | grep nginx
# Удалить контейнеры
docker rm <container_id>
# Теперь можно удалить образ
docker rmi nginx
# Удалить всё неиспользуемое сразу
docker image prune -a
Ошибка 6: Путаница между docker stop и docker kill
# Терминал
# docker stop — корректная остановка
# 1. Посылает SIGTERM процессу
# 2. Ждёт 10 секунд (по умолчанию)
# 3. Если не завершился — посылает SIGKILL
docker stop mynginx # graceful
docker stop -t 30 mynginx # ждать 30 секунд
# docker kill — принудительная немедленная остановка
# Посылает SIGKILL сразу, без ожидания
docker kill mynginx
# Когда использовать kill:
# - контейнер завис и не реагирует на stop
# - нужно немедленно освободить ресурсы
# - в dev-окружении когда данные не важны
Ошибка 7: Накопление «мусора» — контейнеры и образы
После активной работы с Docker накапливаются остановленные контейнеры и неиспользуемые образы, занимающие место на диске.
# Терминал
# Проверить что накопилось
docker ps -a # остановленные контейнеры
docker images # все образы
docker system df # сводка по занятому месту
# Очистка
docker container prune # удалить все остановленные контейнеры
docker image prune # удалить образы без тега (dangling)
docker image prune -a # все неиспользуемые образы
# Или всё сразу
docker system prune # контейнеры + образы + сети
docker system prune --volumes # + тома (осторожно: данные удалятся!)