На этот вопрос уже дан ответ, но вот дополнительная информация.
Независимо от того, находитесь ли вы в 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 отсутствует), сокет Docker принадлежит root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
Вот почему обычный пользователь не может общаться с демоном Docker. Обычный пользователь не имеет достаточных разрешений для доступа к сокету. Он не может связаться с демоном, поэтому он предполагает, что он не работает, и показывает эту ошибку:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Вот почему многие люди просто запускают все команды 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
. Если он существует, 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 - (user)
), запустить, id
чтобы увидеть, если вы находитесь в группе.
Затем вы можете использовать Docker без sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Наконец, слово предупреждения. Только доверенные пользователи могут иметь право управлять вашим демоном Docker . См. Https://docs.docker.com/engine/security/security/ .
(Но, конечно, то же самое верно для sudo - в wheel
группе должны быть только доверенные пользователи .)