Ошибка 'Docker daemon is not running': Полное руководство по диагностике и решению

Ошибка 'Docker daemon is not running': Полное руководство по диагностике и решению

Вы запускаете Docker-команду, а в ответ получаете холодное сообщение \"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?\". Эта ошибка — как закрытая дверь в мир контейнеризации. Не паникуйте! В 99% случаев проблема решается за несколько минут. Давайте разберемся, почему демон Docker отказывается работать и как его \"оживить\".

Что такое Docker Daemon и почему он важен

Docker Daemon (dockerd) — это фоновый процесс, который управляет всеми операциями Docker: созданием контейнеров, работой с образами, сетями и томами. Это \"мозг\" Docker. Когда вы вводите команду docker ps или docker run, CLI обращается именно к демону. Если демон не запущен — связь обрывается, и вы видите роковую ошибку.

Демон Docker обычно требует прав суперпользователя (root). На Linux он запускается как системная служба, на Windows и macOS — через Docker Desktop.

Основные причины ошибки

Ошибка возникает по нескольким ключевым причинам:

  • Служба Docker не запущена — самая частая ситуация, особенно после перезагрузки системы.
  • Проблемы с правами доступа — ваш пользователь не состоит в группе docker.
  • Конфликт версий или неправильная установка — особенно после обновления системы.
  • Конфликт с другими контейнерными платформами — например, с Podman или старыми версиями Docker.
  • Повреждение сокета — файл /var/run/docker.sock удален или недоступен.

Пошаговое решение для Linux

1. Проверка статуса службы

Откройте терминал и выполните команду в зависимости от вашего менеджера служб:

  1. Systemd (Ubuntu, Debian, CentOS 7+): sudo systemctl status docker
  2. SysVinit (старые системы): sudo service docker status

Если служба неактивна, запустите её: sudo systemctl start docker (или sudo service docker start).

2. Добавление пользователя в группу docker

Чтобы не использовать sudo для каждой команды:

  1. sudo usermod -aG docker $USER
  2. Выйдите из системы и зайдите заново (или выполните newgrp docker).

После добавления в группу обязательно перезапустите сессию! Иначе изменения не вступят в силу.

3. Проверка сокета Docker

Убедитесь, что файл сокета существует и доступен:

  • ls -la /var/run/docker.sock
  • Права должны быть: srw-rw---- и владелец root:docker.
  • Если файла нет, перезапустите Docker: sudo systemctl restart docker.

Решение для Windows и macOS

В случае с Docker Desktop:

  1. Убедитесь, что Docker Desktop запущен (иконка в трее/панели меню).
  2. Перезапустите Docker Desktop через меню (Quit Docker Desktop → запустите снова).
  3. Проверьте настройки виртуализации (Hyper-V, WSL2 для Windows; HyperKit для macOS).
  4. Попробуйте сбросить настройки: Settings → Reset → Reset to factory defaults.

Продвинутая диагностика

Если базовые методы не помогли:

  • Проверьте логи демона: sudo journalctl -u docker.service (Linux) или через Docker Desktop GUI.
  • Убедитесь, что нет конфликта портов (демон использует 2375/2376).
  • Попробуйте запустить демон вручную с отладкой: sudo dockerd --debug (осторожно, много вывода!).
  • Проверьте свободное место на диске — демон может не запускаться при нехватке места.

FAQ — Частые вопросы

Почему демон Docker останавливается после перезагрузки?

Скорее всего, служба не добавлена в автозагрузку. Выполните: sudo systemctl enable docker (Linux). В Docker Desktop проверьте настройку \"Start Docker Desktop when you log in\".

Можно ли работать без демона Docker?

Нет, демон обязателен. Но есть альтернативы, например Podman, который может работать в rootless-режиме без постоянного демона.

Ошибка возникает только у одного пользователя. Что делать?

Проверьте членство в группе docker (groups $USER) и права на сокет. Возможно, нужно пересоздать сессию пользователя.

Как полностью переустановить Docker?

1. Удалите пакеты: sudo apt remove docker docker-engine docker.io (для Ubuntu).
2. Удалите конфигурации: sudo rm -rf /var/lib/docker.
3. Установите заново по официальной инструкции.

В чем разница между Docker Daemon и Docker CLI?

CLI (docker) — это интерфейс командной строки, который отправляет запросы демону. Демон — серверная часть, которая эти запросы выполняет. Они могут быть на разных машинах (удаленный демон).