Вы запускаете 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: Базовая проверка и запуск службы
- Linux:
- Попробуйте запустить демон:
sudo systemctl start docker. - Включите автозагрузку:
sudo systemctl enable docker. - Проверьте статус еще раз:
sudo systemctl status docker.
- Попробуйте запустить демон:
- 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 часто помогает полный сброс:
- Полностью закройте приложение (через Exit в трее).
- Завершите все связанные процессы в диспетчере задач (например,
Docker Desktop,com.docker.*). - Запустите приложение снова от имени администратора (правами 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, что сделает вас более уверенным пользователем этой мощной технологии.