Как устранить ошибки «Не удается подключиться к демону Docker»

Опубликовано: 2022-08-14

Графика с логотипом Docker

Docker — одна из ведущих платформ для создания и запуска программных контейнеров. Он поставляется со всем необходимым для использования контейнеров на одном хосте или нескольких распределенных узлах в режиме Swarm.

Docker имеет архитектуру на основе демона. Программное обеспечение, отвечающее за создание и запуск контейнеров, не зависит от процесса CLI, принимающего ваши команды. Это означает, что вы увидите ошибки в CLI, если попытаетесь запустить команды без активного подключения к демону. В этой статье мы расскажем о некоторых методах устранения этих разочаровывающих сообщений.

Симптомы проблемы

Интерфейс командной строки Docker зависит от доступности демона. Он взаимодействует с демоном, используя вызовы API. Когда настроенный демон недоступен, команды Docker, такие как docker docker ps , docker run и docker build , будут отображать сообщение об ошибке, подобное этому:

 $ докер запускает привет-мир: последний
Не удается подключиться к демону Docker по адресу unix:///var/run/docker.sock.
Демон докера запущен?

Это показывает, что CLI пытался связаться с демоном Docker, используя сокет Unix /var/run/docker.sock . Сокет не открыт, поэтому соединение не удалось.

1. Проверьте, запущена ли служба Docker Daemon

Демон Docker обычно управляется службой systemd, которая автоматически запускает Docker после перезагрузки хоста. Вы можете начать устранение неполадок, проверив, работает ли эта служба:

 Докер статуса $ sudo systemctl
docker.service — механизм контейнера приложений Docker
     Загружено: загружено (/lib/systemd/system/docker.service; включено; предустановка поставщика: включена)
     Активный: неактивный (мертвый)

Служба должна сообщать Active: active (running) , если демон запущен. Пример выше показывает inactive (dead) , что означает, что демон остановлен.

Запустите Docker с помощью следующей команды:

 $ sudo systemctl запустить докер

Теперь вы сможете успешно выполнять команды docker CLI.

Вы можете обнаружить, что Docker остается в остановленном состоянии после перезагрузки компьютера. Вы можете решить эту проблему, включив службу, позволив systemd запускать ее автоматически:

 $ sudo systemctl включить докер
$ sudo systemctl демон-перезагрузка

Команда daemon-reload указывает systemd перезагрузить свою конфигурацию, чтобы применить изменения.

2. Запустите демон вручную

Иногда вы можете использовать систему, в которой не установлена ​​служба Docker. Вы можете вручную запустить демон Docker с помощью команды dockerd . Обычно это нужно запускать как root .

 $ судо докерд
INFO[2022-06-29T15:12:49.303428726+01:00] Запуск

Docker останется доступным до тех пор, пока выполняется команда. Используйте Ctrl+C, чтобы остановить демон.

3. Проверка того, что CLI нацелен на правильный демон

Проблемы могут возникнуть, когда CLI пытается подключиться к удаленному экземпляру демона Docker. Обычно это происходит, когда в сообщении об ошибке отображается TCP-адрес:

 $ докер запускает привет-мир: последний
Не удается подключиться к демону Docker по адресу tcp:///0.0.0.0:2375.

В этом примере интерфейс командной строки Docker пытается связаться с демоном Docker по 0.0.0.0:2375 docker используя TCP вместо локального сокета Unix Docker. Это не удастся, если поддержка TCP демона Docker отключена или указанный хост недоступен в сети.

Обычно вы можете решить эту проблему, переключившись на правильный контекст командной строки Docker для соединения с демоном, которое вы хотите использовать:

 $ docker контекст использовать по умолчанию

Вы можете перечислить все доступные контексты и конечные точки демона, к которым они подключаются, с помощью команды context ls :

 $ контекст докера ls
НАЗВАНИЕ ОПИСАНИЕ КОНЕЧНАЯ ТОЧКА DOCKER             
по умолчанию * Текущая конфигурация на основе DOCKER_HOST unix:///var/run/docker.sock

Текущий выбранный контекст выделяется звездочкой.

Неожиданные значения в DOCKER ENDPOINT обычно вызваны установкой переменной среды DOCKER_HOST . В этом случае вы увидите предупреждение:

 $ экспорт DOCKER_HOST=1.2.3.4
$ контекст докера ls
НАЗВАНИЕ ОПИСАНИЕ КОНЕЧНАЯ ТОЧКА DOCKER
по умолчанию * Текущая конфигурация на основе DOCKER_HOST tcp://1.2.3.4:2375
Предупреждение: переменная среды DOCKER_HOST переопределяет активный контекст. Чтобы использовать контекст, либо установите глобальный флаг --context, либо отключите переменную среды DOCKER_HOST.

Наличие переменной среды DOCKER_HOST в вашей оболочке переопределяет конечную точку, определенную выбранным вами контекстом. В этом примере команды docker всегда будут нацелены на экземпляр демона по адресу tcp://1.2.3.4:2375 .

Эту проблему можно решить, очистив переменную DOCKER_HOST :

 $ экспорт DOCKER_HOST=

Теперь Docker будет использовать конечную точку, настроенную вашим активным контекстом. Это будет локальный сокет Unix по умолчанию в /var/run/docker.sock , если только вы не настроили пользовательский контекст вручную.

 $ контекст докера ls
НАЗВАНИЕ ОПИСАНИЕ КОНЕЧНАЯ ТОЧКА DOCKER             
по умолчанию * Текущая конфигурация на основе DOCKER_HOST unix:///var/run/docker.sock

4. Проблемы с разрешениями

Неправильные права пользователя на сокет Docker — еще одна распространенная причина проблем с подключением к демону. Этот тип проблемы обычно показывает немного другое сообщение об ошибке:

 $ докер запускает привет-мир: последний
Получил отказ в доступе при попытке подключения к сокету демона Docker в unix:///var/run/docker.sock

Это происходит, когда вашей учетной записи пользователя Unix не хватает разрешения на взаимодействие с сокетом, предоставляющим Docker API. Добавление себя в группу docker — лучший способ решить эту проблему:

 $ sudo usermod -aG докер $USER

Вам нужно будет открыть новое окно оболочки или выйти из системы и снова войти, чтобы это изменение вступило в силу. Теперь вы сможете запускать команды docker без проблем с разрешениями.

Резюме

«Не удается подключиться к демону Docker» появляется, когда интерфейс командной строки Docker не может связаться с экземпляром демона Docker, используя вашу текущую конфигурацию. Часто это происходит из-за того, что служба демона Docker была остановлена ​​или отключена. Вы также можете пытаться подключиться к удаленному хосту Docker, который отключен.

Теперь вы должны знать о возможных причинах этой проблемы и распространенных способах ее решения. Устраните ошибку, проверив настройки демона Docker, перезапустив службу Docker и убедившись, что у вашей учетной записи пользователя есть разрешение на взаимодействие с сокетом Docker.