Почему я получение сообщения «Не удается подключиться к демону Docker» во время работы демона?

Попробуйте запустить sudo chown $ (whoami) ~ , а также sudo chmod -R u = rwx ~ . Это должно сделать ваш домашний каталог принадлежащим вам и предоставить вам все разрешения.

30
01.01.2016, 15:00
8 ответов

После проведения некоторых исследований по решению этой проблемы в моей системе Linux я решил написать этот ответ. Вот что я сделал, чтобы решить проблему.

На Fedora 22

Установка Docker:

$> curl -fsSL https://get.docker.com/ | sh

После установки Docker:

Пользователь должен быть добавлен в группу docker.

$> sudo usermod -aG docker

Демон docker должен быть запущен

$> sudo service docker start

Вы можете установить запуск демона при загрузке

$> sudo chkconfig docker on

Вы можете проверить, что служба docker запущена

$> service docker status

И последняя проверка

$> docker run hello-world
3
27.01.2020, 19:38

На этот вопрос уже был дан ответ, но вот дополнительная информация.

Независимо от того, используете ли вы Arch или другой дистрибутив, такой как Fedora или Ubuntu, Docker использует файл сокета для связи. Когда вы запускаете команды docker , он использует этот сокет для взаимодействия с демоном Docker. Конечно, демон должен быть запущен (и он часто отключен по умолчанию), но если ваш пользователь не может получить доступ к сокету, он также не сможет взаимодействовать с демоном.

Сначала вы должны установить Docker из репозитория дистрибутива. Некоторые люди загружают сценарий установки и направляют его в оболочку ( curl ... | sh ), но рекомендуется установить его из репозитория, чтобы его можно было легко обновить.

Arch:

# pacman -S docker

Fedora:

# dnf install docker

Как упоминалось выше, демон может быть отключен по умолчанию. Если вы хотите использовать Docker, демон должен быть запущен.

Включите его (чтобы он запускался при загрузке):

# systemctl enable docker

Запустить сейчас (или перезагрузить):

# systemctl start docker

Теперь по умолчанию (если группа докеров отсутствует) сокет Docker принадлежит пользователю root:

# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock

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

Вот почему многие люди просто запускают все команды Docker от имени пользователя root, используя sudo .Но, как описано в другом ответе, у Docker есть собственный механизм для этого, поэтому использовать sudo нет необходимости.

В идеале при установке Docker создается группа под названием docker . Однако, если эта группа не существует при запуске демона, файл сокета принадлежит пользователю root.

В некоторых случаях эта группа имела другое имя, например dockerroot в Fedora . Проверьте grep docker / etc / group , чтобы узнать, есть ли такая группа в вашей системе. Если вы уже используете эту группу (в нее входит ваш пользователь), вам необходимо настроить Docker для ее использования:

В / etc / sysconfig / docker добавьте -G dockerroot (примечание: это обходной путь, а не лучшее решение):

OPTIONS='--selinux-enabled -G dockerroot'

После перезапуска демона ваш пользователь сможет получить доступ к сокету:

# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock

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

# groupadd docker
# systemctl restart docker

Файл сокета будет принадлежать этой группе:

# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock

Ваш пользователь должен быть в группе docker чтобы получить доступ к сокету:

# usermod -aG docker (user)

Возможно, вам придется выйти из системы и снова войти в систему (или su - (пользователь) ), запустите id , чтобы проверить, ' повторно в группе.

Затем вы можете использовать Docker без sudo / root:

$ docker version --format '{{.Server.Version}}'
1.9.1

Наконец, одно предупреждение. Только доверенным пользователям должно быть разрешено управлять вашим демоном Docker . См. https://docs.docker.com/engine/security/security/ .
(Но, конечно, то же самое верно и для sudo - только доверенные пользователи должны быть в группе wheel .)

50
27.01.2020, 19:38

sudo usermod -aG docker [имя пользователя]

затем выйдите из системы и снова войдите в систему

3
27.01.2020, 19:38

У меня тоже была такая же проблема. Проблема заключалась в сокетах, выделенных для docker-daemon и docker-client.

  1. Во-первых, для docker-client в docker.sock не установлено разрешение. Вы можете установить его с помощью sudo usermod -aG docker $ USER

  2. Затем проверьте свой файл bash, в котором запущен docker-client. Для меня он был установлен на 0.0.0.0:2375, в то время как docker-daemon работал на сокете unix. (Он был установлен в конфигурационном файле dockerd).

  3. Просто закомментируйте оскорбительную строку, и все будет нормально.

  4. Но если вы хотите, чтобы он работал на TCP-порте вместо unix-сокета, измените файл конфигурации dockerd, установите его на 0.0.0.0.2375 и оставьте строку в bash такой, как она есть, или установите ее. до 0.0.0.0:2375.

0
27.01.2020, 19:38

Если вы используете Fedora 23 или вариант Redhat, отредактируйте / etc / sysconfig / docker и измените следующее

OPTIONS='--selinux-enabled --log-driver=journald -G yourdockergroup'

Окно настройки перезапуска.

Убедитесь, что вы добавили эту группу в систему и добавили себя в группу.

1
27.01.2020, 19:38

Эта команда работает для меня

sudo grep dwalsh /etc/sudoers

alias docker="sudo /usr/bin/docker"

Я нашел решение на этой странице, если вам нужна дополнительная документация. Почему мы не позволяем пользователям без полномочий root запускать Docker в CentOS, Fedora или RHEL

2
27.01.2020, 19:38

Если вы запустили свой движок docker с помощью: sudo service docker start

вы не можете подключиться с обычным пользователем, даже если вы добавили себя в группу 'docker'.

Вы можете просто остановить его с помощью: sudo service docker stop

и запустить его как обычный пользователь: service docker start

1
27.01.2020, 19:38

Вот шаги, которые я выполнил, чтобы исправить следующее

$ docker info
Cannot connect to the Docker daemon at 
tcp://localhost:2375/usr/lib/systemd/system/docker.socket. Is the docker daemon running?
  1. Добавьте себя в группу докеров

    usermod -aG docker $USER

  2. Исправлены разрешения для сокета и команды docker.

    sudo chgrp docker /usr/bin/docker
    sudo chgrp docker /var/run/docker.sock

    $ ll $(which docker) -rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*

    $ ll /var/run/docker.sock srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock

  3. Добавить переменные в среду конфигурации для команды docker

    export DOCKER_HOST=unix:///var/run/docker.sock

  4. Докер отдыха

    sudo systemctl restart docker

2
27.01.2020, 19:38

Теги

Похожие вопросы