gpt4 book ai didi

sockets - Pycharm Docker Unix/TCP 套接字(带有 unix :///var/run/docker. sock):权限被拒绝

转载 作者:IT老高 更新时间:2023-10-28 21:41:49 37 4
gpt4 key购买 nike

尝试在 PyCharm 专业版中设置 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 而无需管理员权限。

让 PyC​​harm 连接到 Docker 套接字的最安全方法是什么?

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

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

首先,将我的用户添加到 Docker 组确实是可行的方法。问题是当使用 sudo usermod 时,更改不会立即反射(reflect)在您正在使用的用户帐户中。 您需要注销并重新登录才能刷新系统。 更多信息请参阅此帖子并回答:Add user to group but not reflected when run "id" .

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

最佳答案

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

id -nG

如果没有,您需要通过以下命令将您的用户添加到 docker 组中。

sudo groupadd docker
sudo usermod -aG docker $USER

当你执行命令时,sudo systemctl start docker,它会创建一个 docker 进程。该 docker 进程包含 dockerd 守护线程。该命令还创建默认的 docker.sock Unix 套接字。 docker.sock 套接字被 dockerd 守护线程持续监听。这使您可以使用 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 start docker

并且,请参阅下面 PyCharm 中成功的 TCP docker 套接字连接。 enter image description here

关于sockets - Pycharm Docker Unix/TCP 套接字(带有 unix :///var/run/docker. sock):权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191094/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com