Почему Docker может не работать?

«Почему Docker может не работать?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Проблемы с Docker обычно возникают из-за конфигурации, прав доступа или конфликтов ресурсов. Вот основные причины и способы диагностики:

  1. Демон Docker не запущен.

    # Проверить статус (systemd)
    sudo systemctl status docker
    # Запустить
    sudo systemctl start docker
    # Добавить в автозагрузку
    sudo systemctl enable docker
  2. Отсутствие прав у пользователя. По умолчанию управлять Docker может только root или пользователи в группе docker.

    # Добавить текущего пользователя в группу docker
    sudo usermod -aG docker $USER
    # После этого необходимо выйти из системы и зайти заново
    # Проверить группы пользователя
    groups $USER
  3. Конфликты с другими контейнерами или образами.

    # Показать все контейнеры (работающие и остановленные)
    docker ps -a
    # Удалить все остановленные контейнеры
    docker container prune
    # Удалить все неиспользуемые образы, сети, сборки
    docker system prune -a
  4. Проблемы с хранилищем Docker (Disk space). Docker может перестать работать, если закончилось место на диске, особенно в /var/lib/docker.

    # Проверить использование диска Docker
    docker system df
    # Очистить всё
    docker system prune -a --volumes
  5. Конфликты сетевых настроек или брандмауэра.

    # Проверить сетевые интерфейсы Docker
    docker network ls
    # Перезапустить сетевой стек Docker
    sudo systemctl restart docker
    # Проверить, не блокирует ли брандмауэр порты/сети Docker
    sudo iptables -L -n | grep DOCKER
  6. Конфликты с другими системами виртуализации. Если на одном хосте одновременно работают Docker (использующий, например, WSL2 или Hyper-V на Windows) и VirtualBox/VMware, могут возникать конфликты гипервизоров. Обычно требуется остановить одну из платформ.

  7. Поврежденные данные или образы.

    # Проверить логи демона Docker
    sudo journalctl -u docker.service
    # Попробовать полный сброс (осторожно! удалит всё)
    sudo systemctl stop docker
    sudo rm -rf /var/lib/docker
    sudo systemctl start docker

Первые шаги диагностики:

# 1. Проверить, что демон работает
sudo systemctl status docker

# 2. Проверить базовую команду от имени root
sudo docker run hello-world

# 3. Если с root работает, а с пользователем — нет, проблема в правах (п.2 выше).

# 4. Проверить общую информацию и предупреждения
sudo docker info