Как исправить докер: Получен отказ в разрешении проблемы
Я установил 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.
Создайте группу докеров.
$ sudo groupadd docker
Добавьте вашего пользователя в группу Docker.
$ sudo usermod -aG docker $USER
Выйдите из системы и войдите снова и запустите.
$ 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)
- Добавить текущего пользователя в
docker
группа
sudo usermod -aG docker $USER
- Измените права доступа к сокету докера, чтобы иметь возможность подключаться к демону докера
/var/run/docker.sock
sudo chmod 666 /var/run/docker.sock
- добавить группу докеров
$ sudo groupadd docker
- добавьте вашего текущего пользователя в группу Docker
$ sudo usermod -aG docker $USER
3. переключить сеанс в группу докеров
$newgrp - docker
- бежать
$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'.
Вы можете выполнить следующие действия, и это сработает для вас:
- создать группу докеров
sudo groupadd docker
- добавьте своего пользователя в эту группу
sudo usermod -aG docker $USER
- перечислите группы, чтобы убедиться, что группа докеров успешно создана, выполнив эту команду
groups
- выполните следующую команду также, чтобы изменить сеанс для группы докеров
newgrp docker
- изменить групповое владение файлом docker.sock
sudo chown root:docker /var/run/docker.sock
- сменить владельца для каталога.docker
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
- наконец-то
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
Просто откройте терминал и введите эту команду
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.
Чтобы создать группу докеров и добавить своего пользователя:
Создайте группу докеров
sudo groupadd docker
Добавьте своего пользователя в группу докеров
sudo usermod -aG docker $USER
Выйдите из системы и войдите снова, чтобы повторно оценить ваше членство в группе.
При тестировании на виртуальной машине может потребоваться перезапустить виртуальную машину, чтобы изменения вступили в силу.
В настольной среде Linux, такой как X Windows, полностью выйдите из сеанса, а затем снова войдите в систему.
В Linux вы также можете запустить следующую команду, чтобы активировать изменения в группах:
newgrp docker
Убедитесь, что вы можете запускать команды докеров без 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
это будет работать