在尝试在PyCharm专业版中设置Docker时,我遇到了权限被拒绝的错误。我使用的是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组中允许提升权限! 任何能够运行docker
而无需sudo
(因此无需输入密码)的用户还将能够使用挂载在卷中的系统根的容器运行:docker run -v /:/host_root -it --rm ubuntu /bin/bash
。由于您是容器中的root,因此这意味着您可以像在主机上一样操作主机系统 。在将用户添加到docker组之前,请考虑这一点。