Docker正在运行,但Pycharm无法连接到Docker守护程序。

15
我是一名新手,对Docker并不熟悉,没有找到相关问题来解决我正在遇到的问题。
我正在尝试使用Pycharm运行dockerfile,以便在docker内部调试某些程序。 我在Pycharm中打开了dockerfile,并为运行dockerfile创建了一个配置。 运行程序后,在“services”选项卡下会出现错误消息。
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

在我通过Google搜索了解问题后,我找到了这个帖子:无法连接到unix:/var/run/docker.sock的Docker守护程序。Docker守护程序是否正在运行?

该帖子提到我应该运行sudo dockerd。在遇到一些错误后,我彻底卸载了docker,并重新安装了它。 安装后,我运行了以下命令:

systemctl status docker

输出如下:

 docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-09-26 15:06:22 IDT; 59s ago
     Docs: https://docs.docker.com
 Main PID: 24888 (dockerd)
    Tasks: 21
   CGroup: /system.slice/docker.service
           └─24888 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

所以我使用 sudo service docker stop 停止了它。 我再次运行 systemctl status docker,它确实被停止了:

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sat 2020-09-26 15:09:29 IDT; 16s ago
     Docs: https://docs.docker.com
  Process: 24888 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=0/SUCCES
 Main PID: 24888 (code=exited, status=0/SUCCESS)

Sep 26 15:06:21 DL-2 dockerd[24888]: time="2020-09-26T15:06:21.919021419+03:00" level=info msg="Loading containers: done."
Sep 26 15:06:22 DL-2 dockerd[24888]: time="2020-09-26T15:06:22.265996712+03:00" level=info msg="Docker daemon" commit=4484c46d9
Sep 26 15:06:22 DL-2 dockerd[24888]: time="2020-09-26T15:06:22.266253446+03:00" level=info msg="Daemon has completed initializa
Sep 26 15:06:22 DL-2 dockerd[24888]: time="2020-09-26T15:06:22.642407513+03:00" level=info msg="API listen on /var/run/docker.s
Sep 26 15:06:22 DL-2 systemd[1]: Started Docker Application Container Engine.
Sep 26 15:09:29 DL-2 systemd[1]: Stopping Docker Application Container Engine...
Sep 26 15:09:29 DL-2 dockerd[24888]: time="2020-09-26T15:09:29.427473508+03:00" level=info msg="Processing signal 'terminated'"
Sep 26 15:09:29 DL-2 dockerd[24888]: time="2020-09-26T15:09:29.428067483+03:00" level=info msg="stopping event stream following
Sep 26 15:09:29 DL-2 dockerd[24888]: time="2020-09-26T15:09:29.428325869+03:00" level=info msg="Daemon shutdown complete"
Sep 26 15:09:29 DL-2 systemd[1]: Stopped Docker Application Container Engine.

我运行了sudo dockerd,看起来运行正常:

INFO[2020-09-26T15:11:03.918879915+03:00] Starting up                                  
INFO[2020-09-26T15:11:03.919388821+03:00] detected 127.0.0.53 nameserver, assuming systemd-resolved, so using resolv.conf: /run/systemd/resolve/resolv.conf 
INFO[2020-09-26T15:11:03.919768789+03:00] parsed scheme: "unix"                         module=grpc
INFO[2020-09-26T15:11:03.919779317+03:00] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2020-09-26T15:11:03.919792653+03:00] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0  <nil>}] <nil>}  module=grpc
INFO[2020-09-26T15:11:03.919798154+03:00] ClientConn switching balancer to "pick_first"  module=grpc
INFO[2020-09-26T15:11:03.920399082+03:00] parsed scheme: "unix"                         module=grpc
INFO[2020-09-26T15:11:03.920409757+03:00] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2020-09-26T15:11:03.920418642+03:00] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0  <nil>}] <nil>}  module=grpc
INFO[2020-09-26T15:11:03.920423441+03:00] ClientConn switching balancer to "pick_first"  module=grpc
INFO[2020-09-26T15:11:04.050458554+03:00] [graphdriver] using prior storage driver: overlay2 
WARN[2020-09-26T15:11:04.212728085+03:00] Your kernel does not support swap memory limit 
WARN[2020-09-26T15:11:04.212780116+03:00] Your kernel does not support cgroup rt period 
WARN[2020-09-26T15:11:04.212798165+03:00] Your kernel does not support cgroup rt runtime 
WARN[2020-09-26T15:11:04.212812782+03:00] Your kernel does not support cgroup blkio weight 
WARN[2020-09-26T15:11:04.212830211+03:00] Your kernel does not support cgroup blkio weight_device 
INFO[2020-09-26T15:11:04.213206856+03:00] Loading containers: start.                   
INFO[2020-09-26T15:11:04.547434099+03:00] Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address 
INFO[2020-09-26T15:11:04.985878757+03:00] Loading containers: done.                    
INFO[2020-09-26T15:11:05.259805773+03:00] Docker daemon                                 commit=4484c46d9d graphdriver(s)=overlay2 version=19.03.13
INFO[2020-09-26T15:11:05.259975115+03:00] Daemon has completed initialization          
INFO[2020-09-26T15:11:05.418371093+03:00] API listen on /var/run/docker.sock           

但是再次运行Dockerfile仍然出现了相同的错误。我对这种情况感到很迷惑,所以我会非常感激任何反馈。

如果需要更多信息,请告诉我,我很乐意提供。 提前感谢您 :)

6个回答

18
在我的 Mac 上的 Docker 桌面应用程序中,在“设置->高级”下,我不得不启用 Enable default Docker socket (Requires password) 选项,然后从 PyCharm 连接才能正常工作。

我在PHPStorm中遇到了同样的问题,而这个方法解决了它。我猜测这个设置是在最近的Docker Desktop更新中改变的。 - Don't Panic

12

如果您不能像 sudo 一样运行Docker命令,例如 docker images,那么您应该运行 sudo usermod -aG docker $USER,然后您就可以作为非root用户使用 docker 命令(参见https://docs.docker.com/engine/install/linux-postinstall/)。我不确定它是否能解决您的问题。


嗨Rui,我运行了命令,但是当我尝试不使用sudo时,我收到了权限被拒绝的错误。你认为这样做会解决问题吗?对我来说听起来像是一个不同的问题。 - yonatansc97
1
这意味着您不能以非sudo用户身份运行docker命令。我猜想您可能是以非root用户身份运行Pycharm并遇到了上述问题。因此,我建议运行sudo usermod -aG docker $USER命令。它可以解决“非root”问题,也可能解决您最初的问题。 - Rui
我的最后一条评论的意思是,即使运行了“sudo usermod ...”,它似乎仍然无法正常工作。但是今天作为最后一次尝试,我运行了它,很好地解决了问题。非常感谢@Rui! - yonatansc97
7
为使更改生效,您还需要登录和注销 Linux。 - Tom
这种方法,再加上注销并重新登录,解决了我遇到的这个错误实例。 - Jessime Kirk

9

对于使用 Flatpak 的用户 - 在 Pop!_OS 上测试通过:

如果您将 PyCharm / PhpStorm / IntelliJ 安装为 Flatpak 镜像(例如通过 PoP!_Shop):

flatpak override --user --filesystem=/var/run/docker.sock com.jetbrains.PyCharm-Community

根据使用的版本/类型更改尾随JetBrains产品名称(此处为:PyCharm-Community)。


这也适用于Manjaro Linux。感谢@nash0rn的回答。 - Panagiotis Simakis
谢谢你的回答,非常有帮助。 - SirMartin
在 Fedora 上工作过。 - realr
请注意,使用指向/run的符号链接/var/run是不起作用的。 - ManuelSchneid3r
@ManuelSchneid3r 谢谢你的提示,我已经相应地更改了路径。 - nash0rn

2
我的问题如下:
我想在容器中设置调试器,但是PyCharm无法连接到Docker守护程序。
我的环境是: Ubuntu 22.04 PyCharm专业版 Docker Engine v23.0.5
我可以在不使用sudo的情况下运行docker命令,但是当尝试将pycharm与docker连接时,会出现相同的错误“无法连接到unix:///var/run/docker.sock上的Docker守护程序。 Docker守护程序正在运行吗?”
所以这很容易,我在连接菜单中选择了docker-desktop并运行了docker desktop。

我遇到的问题和你一样。你能再详细解释一下你的解决方案吗? - user1599401

0

如果其他建议没有帮助,只需重新启动计算机/笔记本电脑即可。这对我很有帮助 :)


这对我也起作用了。我想知道只是重新启动Docker Desktop是否已足够。 - Code-Apprentice
1
重新登录就可以了。 - dondublon

0

在我安装Pycharm之前,我通过Discover(我使用KDE Linux,Discover类似于Ubuntu中的软件更新)安装了flatpak。这是主要原因。然后我从Pycharm官网重新下载了tar文件并进行了重新安装。这对我有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接