Поиск по сайту:

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


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

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

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

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

$ docker run hello-world:latest
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
Is the docker daemon running?

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

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

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

$ sudo systemctl status docker
docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: inactive (dead)

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

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

$ sudo systemctl start docker

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

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

$ sudo systemctl enable docker
$ sudo systemctl daemon-reload

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

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

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

$ sudo dockerd
INFO[2022-06-29T15:12:49.303428726+01:00] Starting up

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

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

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

$ docker run hello-world:latest
Cannot connect to the Docker daemon at tcp:///0.0.0.0:2375

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

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

$ docker context use default

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

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   unix:///var/run/docker.sock

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

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

$ export DOCKER_HOST=1.2.3.4
$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT
default *   Current DOCKER_HOST based configuration   tcp://1.2.3.4:2375
Warning: DOCKER_HOST environment variable overrides the active context. To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.

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

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

$ export DOCKER_HOST=

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

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   unix:///var/run/docker.sock

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

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

$ docker run hello-world:latest
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

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

$ sudo usermod -aG docker $USER

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

Краткое содержание

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

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