Ошибка '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?". Эта ошибка — классический «стоп-кран» в мире контейнеризации, который может ввести в ступор как новичка, так и опытного разработчика. Но не спешите паниковать. В этой статье мы разберем эту ошибку до атомов, объясним, почему демон Docker — это сердце всей системы, и предоставим вам четкий, пошаговый план по возвращению вашего Docker обратно к жизни.

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

Представьте Docker как ресторан. Ваши контейнеры — это блюда, которые подают гостям (вашим приложениям). Docker CLI (интерфейс командной строки, где вы вводите команды docker run) — это официант, который принимает заказы. А Docker Daemon (dockerd) — это шеф-повар и вся кухня вместе взятые. Это фоновый сервис, который на самом деле выполняет всю тяжелую работу: создает образы, запускает и останавливает контейнеры, управляет сетями и томами.

Когда демон не запущен, официант (CLI) просто не может передать заказ на кухню. Отсюда и ошибка соединения. Демон обычно работает как системная служба и «слушает» сокет (чаще всего /var/run/docker.sock), через который с ним общается CLI.

Ключевой факт: В Windows и macOS Docker Desktop запускает демон внутри легковесной виртуальной машины (Linux VM), поэтому процесс устранения неполадок может немного отличаться от чистого Linux.

Основные причины ошибки и диагностика

Прежде чем что-то исправлять, нужно понять корень проблемы. Вот главные «подозреваемые»:

1. Служба Docker просто не запущена

Самая распространенная причина. Возможно, вы только что установили Docker, перезагрузили систему, или служба была случайно остановлена.

  • Linux (Systemd): Выполните sudo systemctl status docker. Если статус не active (running), то проблема найдена.
  • Windows/macOS (Docker Desktop): Проверьте, запущено ли само приложение Docker Desktop. Иконка должна отображаться в системном трее (панели задач).

2. Недостаточно прав у пользователя

По умолчанию для работы с Docker-сокетом нужны права суперпользователя (root). Если вы запускаете команды без sudo и не добавили своего пользователя в группу docker, соединение будет отвергнуто.

3. Конфликт сокетов или проблемы с файлом сокета

Файл /var/run/docker.sock мог быть удален, поврежден или его права доступа изменены. Также возможен конфликт, если другой процесс использует тот же сокет.

4. Проблемы с виртуализацией (для Docker Desktop)

На Windows (Hyper-V/WSL2) и macOS (HyperKit) проблемы с гипервизором или его настройками могут помешать запуску внутренней VM, где живет демон.

Пошаговое руководство по устранению неполадок

Шаг 1: Базовая проверка и запуск службы

  1. Linux:
    • Попробуйте запустить демон: sudo systemctl start docker.
    • Включите автозагрузку: sudo systemctl enable docker.
    • Проверьте статус еще раз: sudo systemctl status docker.
  2. Docker Desktop: Просто запустите приложение из меню «Пуск» или Applications. Дождитесь, когда иконка в трее станет стабильной (перестанет анимироваться).

Шаг 2: Проверка прав пользователя (Linux)

Если команда с sudo работает, а без — нет, добавьте вашего пользователя в группу docker:

sudo usermod -aG docker $USER

Важно! После этой команды необходимо полностью выйти из системы и зайти заново (или перезагрузиться), чтобы изменения вступили в силу.

Совет по безопасности: Добавление пользователя в группу docker фактически дает ему права root через Docker. Делайте это только на доверенных рабочих машинах.

Шаг 3: Глубокая диагностика и логи

Если служба не запускается, изучите логи — они укажут на конкретную ошибку.

  • Linux: sudo journalctl -u docker.service или sudo systemctl status docker -l.
  • Docker Desktop: Используйте встроенную опцию «Troubleshoot» в настройках или проверьте логи через интерфейс (часто в меню трея).

Частые ошибки в логах: конфликт портов (например, если другой процесс уже использует порт 2375/2376), проблемы с драйвером хранения (overlay2), отсутствие зависимостей.

Шаг 4: «Жесткий» перезапуск (Docker Desktop)

Для Docker Desktop часто помогает полный сброс:

  1. Полностью закройте приложение (через Exit в трее).
  2. Завершите все связанные процессы в диспетчере задач (например, Docker Desktop, com.docker.*).
  3. Запустите приложение снова от имени администратора (правами root на macOS).

Шаг 5: Проверка виртуализации

На Windows убедитесь, что в BIOS/UEFI включена виртуализация (Intel VT-x/AMD-V) и установлены/включены Hyper-V или WSL2 (в зависимости от режима работы Docker Desktop). На macOS проверьте, что в «Безопасности и конфиденциальности» разрешено использование HyperKit.

FAQ: Часто задаваемые вопросы

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

Скорее всего, служба Docker не настроена на автозагрузку. На Linux выполните sudo systemctl enable docker. На Windows/macOS убедитесь, что Docker Desktop добавлен в автозагрузку системы (настройки обычно в Preferences/Settings -> General).

Я добавил пользователя в группу docker, но ошибка осталась.

Вы не выполнили полноценный logout/login или перезагрузку. Просто закрытие и открытие терминала недостаточно. Изменения групп применяются только при новой сессии пользователя.

Docker Desktop пишет "Docker stopped" или "Docker Desktop stopping...".

Это указывает на нестабильность внутренней VM. Попробуйте: 1) Полный перезапуск (шаг 4 выше). 2) В настройках Docker Desktop выполните «Reset to factory defaults» (имейте в виду, что это удалит все ваши контейнеры и образы!). 3) Переустановите Docker Desktop.

Можно ли как-то проверить, что демон точно работает?

Да, самая простая проверочная команда: docker version. Если она выводит информацию и о клиенте (Client), и о сервере (Server), значит, соединение с демоном установлено успешно.

Ошибка возникает только в VS Code или другом IDE.

Проблема часто в том, что среда разработки использует свой терминал или контекст, где переменная окружения DOCKER_HOST или права доступа настроены иначе. Убедитесь, что вы запускаете IDE от имени того же пользователя и проверьте настройки Docker внутри IDE.

Ошибка "Docker Daemon is not running" — это не тупик, а четкий сигнал системы. Следуя этому руководству, вы сможете не только быстро восстановить работу, но и глубже понять архитектуру Docker, что сделает вас более уверенным пользователем этой мощной технологии.