无法连接到docker守护进程,docker守护进程正在运行吗?

3
我正在本地Mac机器上使用Docker上的Jenkins。 我在Ubuntu VirtualBox上运行另一个Docker。 现在,有两个Docker机器。 一个在我的Mac机器上,另一个在我的Ubuntu VirtualBox机器上。 我正在Mac Docker上运行Jenkins。 现在,在Jenkins管道中,我想在我的ubuntu机器上构建一个镜像。 我已经配置了Jenkins docker cloud,并在docker主机URL中连接到ubuntu docker-machine。 但是在构建新镜像时,我遇到了错误。 无法连接到unix:///var/run/docker.sock处的Docker守护程序。 Docker守护程序正在运行吗? 我甚至尝试在/lib/systemd/system/docker.service中添加ExecStart = /usr/bin/dockerd -H tcp:///0.0.0.0:4243 -H unix:///var/run/docker.sock。 当我检查ps -aux时,有如图所示的输出image。 请问有人可以帮帮我吗?感谢您的帮助。
2个回答

0

首先,如果我有这样的设置,我不会费心连接到远程docker,而是在Ubuntu机器上安装Jenkins代理并让它与Jenkins主服务器通信。

但是,如果您想按照当前设置的方式进行操作,即从一个docker主机内部向另一个docker主机进行通信,我建议您查看以下内容:

  1. 你的Jenkins主机和Ubuntu机器非常隔离,它们就像在不同的机器上一样,甚至不在同一个房间里。Unix域套接字(以unix://*标识)是用于在单个本地操作系统内核中通信的,试图将它们桥接到远程机器将导致灾难。

  2. 因此,Jenkins与远程主机通信的唯一方式是通过TCP等远程协议。大多数情况下,当您使用默认设置安装Docker时,它根本不会监听TCP,主要是出于安全原因。

  3. 首先,您应该配置Ubuntu机器内部的Docker以侦听TCP端口并接受来自远程主机的连接。您可以使用netstat -nat查看是否有任何内容正在侦听TCP 4243。当正确配置时,您将在nestat输出中看到以0.0.0.0:4243或类似内容开头的行。

  4. 其次,您需要确保Ubuntu主机上的防火墙/iptables/netfilter配置允许外部连接。一个好的测试是从Mac终端会话中尝试telnet <ubuntu-ip> 4243

  5. 然后,您需要确保Docker网络配置正确,以便来自运行Jenkins的容器内部的连接最终到达Ubuntu机器。要进行测试,您需要exec -it进入Jenkins容器并重复telnet测试。在现代Linux上,通常不安装telnet,因此您可以使用curl -vvv,它将始终以错误结束,因此只需查看详细输出以查看错误是否是因为无法通信(超时、连接重置等)或错误发生是因为您的curl尝试与docker通信并获得了无意义的响应。在后一种情况下,您可以认为设置正确。

  6. 最后,您需要告诉Jenkins Docker通过TCP与远程Docker通信。通常,这是通过命令行给出的,例如docker run、docker ps、docker exec。


非常感谢您回答这个问题。您能否再次检查我的问题,我已经添加了一张新图片。我认为这是根用户的问题。 - Johnny Bravo
这绝对不是一个 root 用户的问题。Jenkins 在远程机器上,因此您只能通过 TCP 进行通信。TCP 只是一个简单的管道,除非您运行某种用户身份验证协议,否则它不知道另一端是谁。 - Vlad
好的。非常感谢您的帮助。我一定会尝试上述步骤并告诉您结果。再次感谢。 - Johnny Bravo
嗨@Vlan,我猜unix://正在出问题。你能告诉我任何替代unix的方法,以便我的Ubuntu和Mac机器可以通信吗? - Johnny Bravo
即使使用TCP,我仍然遇到了相同的错误。 - Johnny Bravo
显示剩余2条评论

0

我已经通过在我的Jenkins Pipeline中定义从机标签来配置它。 Jenkins代理程序运行在各种不同的环境中,例如物理机器、虚拟机器、Kubernetes集群和Docker镜像。 在您的Jenkins Pipeline或JenkinsFile中,您必须根据您使用的内容设置代理程序,无论是使用Docker镜像还是任何虚拟机。 同时非常感谢@Vlad,你告诉我的所有事情都非常有帮助。


请添加更多细节以扩展您的答案,例如工作代码或文档引用。 - Community

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