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


304

Я установил Docker на моей машине, где у меня установлена ​​ОС Ubuntu. После чего я установил докер, когда я запускаю

sudo docker run hello-world

Все нормально, но я хочу скрыть слово, sudoчтобы сделать команду более короткой.

Если я напишу команду без слова sudo

docker run hello-world

Это отображает следующее:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.

То же самое случилось, когда я пытаюсь сделать

docker-compose up

Как я могу решить это?


1
Возможный дубликат
работающего

Ответы:


440

Если вы хотите запустить docker от имени пользователя без полномочий root, вам нужно добавить его в группу Docker.

  1. Создайте группу докеров, если она не существует
$ sudo groupadd docker
  1. Добавьте вашего пользователя в группу Docker.
$ sudo usermod -aG docker $USER
  1. Запустите следующую команду или Выйдите из системы и снова войдите в систему и запустите (это не работает, вам может потребоваться перезагрузить компьютер)
$ newgrp docker
  1. Проверьте, можно ли запустить Docker без рута
$ docker run hello-world

Взято из официальной документации докера: manage-docker-as-a-non-root-user


70
У меня все еще есть эта проблема после выполнения всех трех шагов "(
Ананд

78
Мне пришлось перезагрузить Ubuntu 18, чтобы он заработал - простой выход из системы и повторный вход в систему не помогли.
Боже,

26
@heez перезагрузка может не потребоваться, перезагрузки докера мне хватило. sudo systemctl restart docker
Погремушка

5
Обратите внимание, что членство в dockerгруппе, по сути, предоставляет root-права без применения регулярных политик sudo и аудита. Смотрите GitHub выпуск # 9976 для деталей и обсуждения.
raehik

13
Перезапуск докера у меня не сработал, только перезагрузка (Ubuntu 18.04)
Joakim Tall

360

После обновления я получил отказано в разрешении. Выполнение шагов после установки 'mkb' ничего не меняет, потому что мой пользователь уже был в группе 'docker'; Я повторяю это дважды, но безуспешно.

После часа поиска наконец-то сработало следующее решение:

sudo chmod 666 /var/run/docker.sock

Решение пришло из Ольшанска .

Похоже, что при обновлении воссоздается сокет без достаточных разрешений для группы «Докер».

Проблемы

Этот жесткий chmod открывает дыру в безопасности и после каждой перезагрузки эта ошибка запускается снова и снова, и вам приходится каждый раз повторять вышеуказанную команду. Я хочу решение раз и навсегда. Для этого у вас есть две проблемы:

  • 1) Проблема сSystemD : сокет будет создан только с владельцем 'root' и группой 'root'.

    Вы можете проверить эту первую проблему с этой командой:

    ls -l /lib/systemd/system/docker.socket
    

    Если все это хорошо, вы должны увидеть root/docker«не root/root».

  • 2) Проблема с графическим логином : /superuser/1348196/why-my-linux-account-only-belongs-to-one-group

    Вы можете проверить эту вторую проблему с этой командой:

    groups
    

    Если все правильно, вы должны увидеть группу Docker в списке. Если нет, попробуйте команду

    sudo su $USER  -c groups
    

    если вы видите, то группа Docker это из-за ошибки.

Решения

Если вам удастся получить обходной путь для графического входа в систему, это должно сделать работу:

sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

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

sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Это работает, потому что вы находитесь в графической среде и, вероятно, единственный пользователь на вашем компьютере. В обоих случаях вам нужна перезагрузка (или sudo chmod 666 /var/run/docker.sock)


2
если докер был установлен согласно doc на docs.docker.com/install, то вам никогда не нужно иметь дело с такими командами
Скотт Стенсланд,

4
@ Скотт Стенсланд Я установил докер много раз «в соответствии с документом». Я думаю, что проблема возникла из-за плохого взаимодействия с другим неопознанным пакетом.
Galigator

1
В docker-in-docker я неправильно монтировал /var/run/docker.sock с хоста без :roконца ... как только я добавил, что мне
пора

2
Я использую Ubuntu 18 на EC2 - AWS и отлично работал. Все остальные (sudo usermod -aG docker $ USER и другие) не работали
cherah30

1
Спасибо, это исправлено в Ubuntu 18.04 LTS. отдыхать и добавлять в groud не стали
Дипанш Пармани

32
  1. Добавить группу докеров
$ sudo groupadd docker
  1. Добавьте вашего текущего пользователя в группу Docker
$ sudo usermod -aG docker $USER
  1. Переключить сессию на группу Docker
$ newgrp - docker
  1. Запустите пример для тестирования
$ docker run hello-world

Команда newgrpзапросила пароль и не приняла мой пароль пользователя. Вместо этого su - $USERработал, чтобы избежать выхода из системы.
bluenote10

18
  1. Добавить текущего пользователя в dockerгруппу
sudo usermod -aG docker $USER
  1. Измените права доступа к сокету докера, чтобы иметь возможность подключаться к демону докера /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

15

Я решаю эту ошибку с помощью команды:

$ sudo chmod 666 /var/run/docker.sock

9

Вы всегда можете попробовать Manage Docker as a non-root userпараграф в https://docs.docker.com/install/linux/linux-postinstall/ документах.

После этого также, если проблема не устранена, вы можете выполнить следующую команду для ее решения:

sudo chmod 666 /var/run/docker.sock

2
Создание сокета докера, доступного для чтения или записи каждому (вместе с ним chmod 666), является катастрофой безопасности ... Это никогда не следует рекомендовать.
Айла Секура

6

Получено отказ в разрешении при попытке подключиться к сокету демона Docker в unix: ///var/run/docker.sock: Получить http: //%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json : dial unix /var/run/docker.sock: подключение: разрешение запрещено

sudo chmod 666 /var/run/docker.sock

Это исправит мою проблему.


2

Чтобы устранить эту проблему, я искал, где установлены мои докер и docker-compose. В моем случае dockerбыл установлен в /usr/bin/dockerи docker-composeбыл установлен в /usr/local/bin/docker-composeпути. Затем я пишу это в моем терминале:

Докеру:

sudo chmod +x /usr/bin/docker

Кому docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

Теперь мне не нужно писать в моих командах Docker слово sudo

/ ************************************************* ********************** /

Errata:

Лучшее решение этой проблемы прокомментировал @mkasberg. Я цитирую комментарий:

That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

Большое спасибо!


2
Это может сработать, вы можете столкнуться с проблемами в будущем. Кроме того, это уязвимость безопасности. Тебе было бы лучше просто добавить себя в dockerгруппу, как говорят доктора. sudo groupadd docker, sudo usermod -aG docker $USER.
Mkasberg

Эй, @mkasberg! Спасибо за ваш комментарий! Я сделал ошибку, чтобы процитировать ваше решение. Большое спасибо!
Карлос Андрес

1

lightdm и kwallet отправляются с ошибкой, которая, по-видимому, не проходит дополнительные группы при входе в систему. Чтобы решить это, я также sudo usermod -aG docker $USERдолжен был закомментировать

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

в

#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so

в /etc/pam.d/lightdm перед перезагрузкой , для Докер-группы на самом деле имеют эффект.

ошибка: https://bugs.launchpad.net/lightdm/+bug/1781418 и здесь: https://bugzilla.redhat.com/show_bug.cgi?id=1581495



1

Серьезно, ребята. Не добавляйте Docker в свои группы и не изменяйте posix-сокеты (без ужесточения SELinux), это простой способ создания корневых привилегий. Просто добавьте псевдоним в ваш .bashrc, он проще и безопаснее: alias dc = 'sudo docker'.


1

Вы можете выполнить следующие шаги, и это будет работать для вас:

  1. создать группу докеров sudo groupadd docker
  2. добавьте своего пользователя в эту группу sudo usermod -aG docker $USER
  3. перечислите группы, чтобы убедиться, что группа Docker успешно создана с помощью этой команды groups
  4. выполните следующую команду также, чтобы изменить сеанс для группы докеров newgrp docker
  5. изменить владельца группы для файла docker.socksudo chown root:docker /var/run/docker.sock
  6. изменить владельца для каталога .docker sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. Ну наконец то sudo chmod g+rwx "$HOME/.docker" -R

После этого теста вы можете запустить docker ps -a


Я хотел получить ответ, который не требует перезагрузки. Это был единственный ответ, который обеспечил это. «Хитрость» заключается в chownфайле docker.sock.
Потерка

1

После того, как вы установили Docker, создали группу 'Docker' и добавили в нее пользователя, отредактируйте файл модуля обслуживания Docker:

sudo nano /usr/lib/systemd/system/docker.service

Добавьте две строки в раздел [Сервис]:

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock

Сохраните файл (Ctrl-X, y, Enter)

Запустите и включите сервис Docker:

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

0

После установки докера на Centos. При выполнении команды ниже, я получил ошибку ниже.

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Изменить группу и разрешение для docker.socket

[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$

Проверьте, используя приведенную ниже команду docker

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[centos@aiops-dev-cassandra3 ~]$

-4

sudo chmod 666 /var/run/docker.sock

это помогло мне, когда я получал сообщение об ошибке даже при входе в докер, но теперь это прекрасно работает в моей системе.


1
Использовать этот метод очень небезопасно. Просмотрите инструкции после установки, приведенные в комментариях к основному вопросу.
Алехандро Висьедо Гарсия
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.