1. Путаница между Image и Container
Проблема: Новички часто путают образ (image) и контейнер (container), считая их одним и тем же.
Симптомы:
- «Я изменил файл в контейнере — почему образ не изменился?»
- Попытка удалить «контейнер» командой
docker rmi - Попытка запустить образ как уже запущенный
Правило:
- Image — статичный шаблон (как класс в ООП), неизменяемый
- Container — запущенный экземпляр образа (как объект), имеет состояние
# Терминал — правильно: удалить контейнер, потом образ
docker rm <container-id> # сначала контейнер
docker rmi nginx # потом образ
2. Использование :latest без явного указания
Проблема: При команде
docker pull nginx без тега скачивается nginx:latest. Через месяц :latest может означать другую версию.
# Проблема (из лекции — так делают):
docker pull nginx # скачает nginx:latest — неопределённая версия
# Лучше так:
docker pull nginx:1.25 # конкретная версия
docker pull nginx:1.25-alpine # конкретная версия на alpine
Почему важно: В продакшене нельзя допускать, чтобы образ изменился без явного обновления. Всегда пинуйте конкретный тег.
3. Потеря данных при удалении контейнера
Проблема: Данные, созданные внутри контейнера (файлы, БД), теряются при
docker rm.
# Терминал — данные пропадут при rm:
docker run -it ubuntu bash
# Внутри: touch /tmp/my-file.txt && exit
docker rm <id> # /tmp/my-file.txt удалён навсегда
# Правильно: использовать volumes (урок 02)
docker run -v /host/data:/container/data ubuntu bash
Запомните: Read-write слой контейнера живёт только пока контейнер существует. Для постоянных данных — volumes.
4. Нельзя удалить образ — зависимые контейнеры
Ошибка:
Error response from daemon: conflict: unable to delete... image is being used by stopped container
# Терминал — ошибка:
docker rmi nginx
# Error: image is being used by stopped container abc123
# Решение: сначала удалить все контейнеры от этого образа
docker ps -a # найти все контейнеры
docker rm abc123 # удалить зависимый контейнер
docker rmi nginx # теперь можно удалить образ
# Или принудительно:
docker rmi -f nginx # force — удалит образ, но контейнер останется без ссылки
5. Docker Daemon не запущен
Ошибка:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock или error during connect: ... The system cannot find the file specified
Причина: Docker Desktop не запущен (Windows/Mac) или docker сервис остановлен (Linux).
# Терминал Windows/Mac — просто запустите Docker Desktop
# Терминал Linux:
sudo systemctl start docker
sudo systemctl enable docker # автозапуск при загрузке
docker ps # проверка
6. Порт уже занят
Ошибка:
Bind for 0.0.0.0:80 failed: port is already allocated
# Терминал — порт 80 уже занят другим процессом или контейнером
docker run -d -p 80:80 nginx
# Решение: использовать другой порт хоста
docker run -d -p 8080:80 nginx # порт 8080 хоста → 80 контейнера
# Или найти и остановить конфликтующий контейнер:
docker ps # найти контейнер на порту 80
docker stop <id>
7. Контейнер сразу останавливается
Симптом:
docker run nginx → контейнер запускается и тут же пропадает из docker ps.
# Терминал — без -d контейнер работает на переднем плане
# Ctrl+C завершает его
# Правильно — запустить в фоне:
docker run -d nginx # detached mode
# Проверить статус:
docker ps -a # увидим "Exited" если остановился с ошибкой
docker logs <id> # посмотреть причину