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

Я установил 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

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

41 ответ

Решение

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

  1. Создайте группу докеров.

    $ sudo groupadd docker
    
  2. Добавьте вашего пользователя в группу Docker.

    $ sudo usermod -aG docker $USER
    
  3. Выйдите из системы и войдите снова и запустите.

    $ docker run hello-world
    

Взято из докера официальной документации: https://docs.docker.com/install/linux/linux-postinstall/

После обновления я получил отказано в разрешении. Выполнение шагов после установки '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) Проблема с графическим входом в систему: https://superuser.com/questions/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)

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

3. переключить сеанс в группу докеров

$newgrp - docker
  1. бежать
$docker run hello-world

Решаю эту ошибку командой:

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

Если создание группы докеров и добавление в нее своего пользователя не работает (лучшее решение, описанное в предыдущих ответах), то это вторая лучшая альтернатива:

      sudo chown $USER /var/run/docker.sock 

Что он делает, так это меняет право собственности на файл на вашего пользователя.

Примечание. Это действительно плохая практика использования , потому что он дает разрешения практически всем на доступ и изменение файл.

Требуются только изменения в разрешении файла sock.

      sudo chmod 666 /var/run/docker.sock

это будет работать определенно.

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

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

sudo chmod 666 /var/run/docker.sock

Исправить проблему с Docker: (в разрешении отказано)

  • Создайте группу докеров, если она не существует: sudo groupadd docker
  • Посмотрите количество суперпользователей в доступной системе: grep -Po '^sudo.+:\K.*$' /etc/group
  • Экспортируйте пользователя в командную оболочку linux: export USER=demoUser
  • Добавьте пользователя в группу докеров: sudo usermod -aG docker $USER
  • Выполните следующую команду / Вход или выход: newgrp docker
  • Проверьте, работает ли докер нормально или нет: docker run hello-world
  • Перезагрузитесь, если вы все еще получаете сообщение об ошибке: reboot

Мы всегда забываем о ACLs. Видеть <tcode id="157729"></tcode>.


sudo setfacl -m user:$USER:rw /var/run/docker.sock

Чтобы устранить эту проблему, я искал, где установлены мои докер и 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/

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

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

sudo chmod 666 /var/run/docker.sock

Это решит мою проблему.

Ubuntu 21.04 владение сокетом systemd

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

У меня не было сокета unix, поэтому я его съел.

      sudo chown $(whoami):$(whoami) /var/run/docker.sock

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

      sudo nano /etc/systemd/system/sockets.target.wants/docker.socket

докер.сокет:

      [Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=YOUR_USERNAME_HERE
SocketGroup=docker

[Install]
WantedBy=sockets.target

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

Войдите в контейнер и измените ACL файла

      sudo usermod -aG docker $USER
sudo setfacl --modify user:$USER:rw /var/run/docker.sock

Это лучшее решение, чем использование chmod.

Используйте эту команду

sudo usermod -aG docker $USER

затем перезагрузите компьютер, это сработало для меня.

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

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

  1. создать группу докеров sudo groupadd docker
  2. добавьте своего пользователя в эту группу sudo usermod -aG docker $USER
  3. перечислите группы, чтобы убедиться, что группа докеров успешно создана, выполнив эту команду 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

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 перед перезагрузкой, чтобы группа Docker действительно имела эффект.

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

Перезагрузка машины у меня сработала.

$ reboot

Просто откройте терминал и введите эту команду

sudo chmod 666 /var/run/docker.sock

Самое простое решение - набрать

sudo chmod 666 /var/run/docker.sockкаждый раз, когда вы загружаете свою машину. Однако этот метод наносит ущерб любой системе безопасности, которая может быть на месте, и открывает сокет Docker для всех. Если это приемлемо для вас - например: единственный пользователь вашей машины - используйте его.

Тем не менее, он будет требоваться каждый раз при загрузке вашей машины, вы можете заставить его работать с загрузкой, добавив

      start on startup
task
exec chmod 666 /var/run/docker.sock

к /etc/init/docker-chmod.conf файл.

Демон Docker привязывается к сокету Unix вместо TCP-порта. По умолчанию этот сокет Unix принадлежит пользователю root, и другие пользователи могут получить к нему доступ только с помощью sudo . Демон Docker всегда запускается от имени пользователя root.

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

Чтобы создать группу докеров и добавить своего пользователя:

  1. Создайте группу докеров

             sudo groupadd docker
    
  2. Добавьте своего пользователя в группу докеров

             sudo usermod -aG docker $USER
    
  3. Выйдите из системы и войдите снова, чтобы повторно оценить ваше членство в группе.

    При тестировании на виртуальной машине может потребоваться перезапустить виртуальную машину, чтобы изменения вступили в силу.

    В настольной среде Linux, такой как X Windows, полностью выйдите из сеанса, а затем снова войдите в систему.

    В Linux вы также можете запустить следующую команду, чтобы активировать изменения в группах:

             newgrp docker 
    
  4. Убедитесь, что вы можете запускать команды докеров без sudo. Приведенная ниже команда загружает тестовое изображение и запускает его в контейнере. Когда контейнер запускается, он печатает информационное сообщение и закрывается.

            docker run hello-world
    

Если вы изначально запускали команды Docker CLI с помощью sudo перед добавлением пользователя в группу docker, вы можете увидеть следующую ошибку, которая указывает на то, что ваш каталог ~ / .docker / был создан с неправильными разрешениями из-за команд sudo.

         WARNING: Error loading config file: /home/user/.docker/config.json -
   stat /home/user/.docker/config.json: permission denied

Чтобы решить эту проблему, либо удалите каталог ~ / .docker / (он создается автоматически, но все пользовательские настройки теряются), либо измените его владельца и разрешения, используя следующие команды:

      sudo chown "$USER":"$USER" /home/"$USER"/.docker -R

sudo chmod g+rwx "$HOME/.docker" -R

Все остальные шаги по установке докера в Linux можно найти здесь https://docs.docker.com/engine/install/linux-postinstall/

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

      $ sudo systemctl restart 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

Я столкнулся с аналогичной проблемой, но там, где я хотел создать контейнер, нужно было смонтировать /var/run/docker.sock как том (агент Portainer), при этом все это работало под другим пространством имен. Обычно контейнер не заботится о том, в каком пространстве имен он запущен - это своего рода точка - но, поскольку доступ осуществлялся из другого пространства имен, это пришлось обойти.

Добавление --userns=host к команде запуска для контейнера позволил ему использовать получение правильных разрешений.

Довольно конкретный вариант использования, но после большего количества часов исследований, чем я хочу признать, я просто подумал, что должен поделиться этим со всем миром, если кто-то еще окажется в этой ситуации:)

я пробую это рекомендовать с sudo похвалить, и это было нормально. sudo docker pull hello-world или же sudo docker run hello-world

Добавление ответа здесь для дальнейшего использования:
(Это причина и то, что решило ее для моего варианта использования)

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

$ sudo usermod -aG docker $USER

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

Источник

Docker уже создал руководство по запуску демона Docker от имени пользователя без полномочий root (режим без рута) .

Режим без рута позволяет запускать демон Docker и контейнеры от имени пользователя без полномочий root, чтобы устранить потенциальные уязвимости в демоне и среде выполнения контейнера.

Вопрос определенно не в том, но поскольку это первый результат поиска при поиске сообщения об ошибке в Google, я оставлю его здесь.

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

Если он не запущен, попробуйте запустить его:

sudo systemctl start docker.service

... и еще раз проверьте статус:

systemctl status docker.service

Если он не запустился, выясните причину. Вероятно, вы изменили файл конфигурации и сделали ошибку (как и я при изменении /etc/docker/daemon.json)

Если пользователь уже был в группе «докер»; попробуйте дать разрешение файлу /var/run/docker.socksudo chmod 666 /var/run/docker.sockэто будет работать

Другие вопросы по тегам