套接字 – Pycharm Docker Unix / TCP套接字(使用unix:///var/run/docker.sock):权限被拒绝

前端之家收集整理的这篇文章主要介绍了套接字 – Pycharm Docker Unix / TCP套接字(使用unix:///var/run/docker.sock):权限被拒绝前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

尝试在PyCharm Professional版本中设置Docker时出现Permission Denied错误.我在Debian Jessie(BunsenLabs).

Cannot connect: io.netty.channel.AbstractChannel$AnnotatedConnectException: connect(..) Failed: Permission denied: /var/run/docker.sock
caused by: java.net.ConnectException: connect(..) Failed: Permission denied

它既有默认设置(使用Unix套接字),也有TCP套接字,Engine API URL = unix:///var/run/docker.sock(它有意义吗?).

如果我们查看套接字上的权限:

$ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0 Jul  5 11:18 /var/run/docker.sock

我们看到它由root和docker组拥有.

所以我尝试将我的用户添加到docker组(使用sudo usermod -a -G docker USERNAME),然后重新启动Docker服务(使用sudo service docker restart),但它仍然无效.

允许PyCharm使用套接字的一种方法是使用root权限运行它,即sudo pycharm,但我想避免这种情况.我还能够通过为套接字上的其他人设置读写权限来解决这个问题(sudo chmod o rw /var/run/docker.sock),但现在每个人都可以在没有管理员权限的情况下在该机器上使用Docker.

允许PyCharm连接到Docker套接字最安全的方法是什么?

此外,请注意Docker在命令行上运行正常.在快速和脏修复(chmod o rw)之前,我不得不使用sudo docker,并更新了/ etc / sudoers以不输入此命令的密码.现在它即使没有sudo也可以工作.它感觉不安全,但它是一台开发机器,所以如果没有其他解决方案,我会保持这样.

编辑:我正在添加其他重要信息.

首先,在Docker组中添加我的用户确实是要走的路.问题是,当使用sudo usermod时,不会立即反映您正在使用的用户帐户的更改.您需要注销并再次登录才能刷新系统.本文中的更多信息和答案:Add user to group but not reflected when run “id”.

其次,在Docker组中添加自己允许权限提升!任何能够在没有sudo的情况下运行docker(因此无需输入密码)的用户也可以运行容器,其中系统的根安装在卷中:docker run -v /:/ host_root -it –rm ubuntu /斌/庆典.由于您是容器中的root用户,这意味着您可以像操作主机上的root一样操作主机系统.在Docker组中添加用户之前,请考虑这一点.

最佳答案
我假设,您的用户名已经在docker组中.要检查这一点,请发出以下命令.

id -nG

如果没有,则需要通过下面的命令将用户添加到docker组中.

sudo groupadd docker
sudo usermod -aG docker $USER

当您执行命令sudo systemctl start docker时,它会创建一个docker进程.该docker进程包含dockerd守护程序线程.该命令还会创建默认的docker.sock Unix套接字. dockerd守护程序线程持续监听docker.sock套接字.这使您可以使用docker.pid进程执行内核级IPC.为了能够使用此docker套接字,您需要具有进程级别(docker.pid)和文件级别(docker.sock)的适当权限.因此,执行以下两个命令可以解决您的问题.

sudo chmod a+rwx /var/run/docker.sock
sudo chmod a+rwx /var/run/docker.pid

如您所见,它在PyCharm中没有显示任何错误.

enter image description here

注意:运行sudo dockerd -H unix:///var/run/docker.sock也会执行与上述相同的操作.

此外,您可以创建TCP套接字,以便可以将此TCP套接字用于您自己的主机以及任何远程主机.

docker stop:sudo systemctl stop docker

dockerd -H tcp://127.0.0.1:2375 -H //你应该在执行这个命令之前停止docker

启动docker:sudo systemctl启动docker

并且,请参阅下面PyCharm中成功的TCP docker socket连接.

enter image description here

原文链接:https://www.f2er.com/docker/435884.html

猜你在找的Docker相关文章