Sockets Pycharm Docker Unix/TCP套接字(带unix:///var/run/docker.sock):拒绝许可
在PyCharm专业版中尝试设置Docker时,我遇到权限被拒绝的错误。我在Debian Jessie(BunsenLabs)上 默认设置(使用Unix套接字)和TCP套接字(引擎API URL=Sockets Pycharm Docker Unix/TCP套接字(带unix:///var/run/docker.sock):拒绝许可,sockets,docker,pycharm,Sockets,Docker,Pycharm,在PyCharm专业版中尝试设置Docker时,我遇到权限被拒绝的错误。我在Debian Jessie(BunsenLabs)上 默认设置(使用Unix套接字)和TCP套接字(引擎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
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组中确实是一条路。问题是,当使用sudousermod
时,您所使用的用户帐户不会立即反映更改您需要注销并再次登录以刷新系统。本文中的更多信息和答案:
其次,将自己添加到Docker组允许权限升级任何能够运行
docker
而无需sudo
(因此无需输入密码)的用户也将能够运行一个容器,该容器的系统根安装在一个卷中:docker run-v/:/host\u root-it--rm ubuntu/bin/bash
。由于您是容器中的root,这意味着您可以操作主机系统,就像您是主机上的root一样。在docker组中添加用户之前,请考虑这一点。另一个值得尝试的选项是通过本地主机tcp接口公开docker守护程序-
参考文档,您可以编写/etc/docker/daemon.json
,如下所示:
{
"hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]
}
通过该设置,您可以尝试重新启动docker并在PyCharm首选项中配置
TCP套接字 看来我的第一次尝试(加入docker
团队)是正确的。但它需要重新启动
事实上,我很惊讶在groups
命令的输出中没有看到“docker”。重新启动后,现在显示“docker”
我将套接字权限重置为以前的状态:sudo chmod o-rw/var/run/docker.sock
PyCharm能够成功连接到套接字。我假设您的用户名已经在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中没有显示任何错误。
注:运行sudo dockerd-Hunix:///var/run/docker.sock
也执行与上述相同的操作
此外,您可以创建TCP套接字,以便您可以为自己的主机以及任何远程主机使用此TCP套接字
docker stop:sudo systemctl stop docker
dockerd-Htcp://127.0.0.1:2375 -H
//在执行此命令之前,应停止docker
启动docker:sudo systemctl启动docker
并且,请参见下面PyCharm中的成功TCP docker套接字连接。
你的码头工人在PyCharm外工作正常吗?意思-尝试从bash访问docker守护进程时没有权限问题吗?我之前在问题中说过这一点,并将其删除,但是,是的,docker在命令行中工作得很好!我将把它添加回去。我以前没有
/etc/docker/daemon.json
,所以我创建了它并编写了完全相同的内容,但现在docker不会启动。我收到一条消息,如docker.service start请求重复太快,拒绝启动。
在日志中。。。也许是因为康基试图运行docker命令。将在重新启动后重试。所以!我转而选择systemd服务的配置:。我仍然需要给它一分钟多一点的时间才能重新启动:lettime=5;直到服务docker启动;不要浪费时间睡觉;回声时间;让时间+=$时间;完成
。下班后工作=40。但是实际上,它现在正在使用srwrw----1根docker/var/run/docker.sock
,我的用户在docker组中。我想它需要重新启动。重新启动前,组
未显示“docker”。现在是了。直到很多!无论如何,谢谢你的建议
sudo chmod a+rwx /var/run/docker.sock
sudo chmod a+rwx /var/run/docker.pid