Docker远程守护程序(TCP):无法连接到Docker守护程序

Docker远程守护程序(TCP):无法连接到Docker守护程序,docker,tcp,ubuntu-18.04,docker-daemon,Docker,Tcp,Ubuntu 18.04,Docker Daemon,我正在尝试通过TCP将docker守护程序从客户端连接到远程主机,但出现以下错误: docker -H tcp://{{HOST_IP}}:2375 ps Cannot connect to the Docker daemon. Is 'docker daemon' running on this host? 可能的原因是什么?找到解决方案的正确调试方法是什么 系统:Ubuntu 18.04(客户端和主机) ufw:为所有传入和传出启用(用于测试目的) 访问权限:在客户端和主机上使用roo

我正在尝试通过TCP将docker守护程序从客户端连接到远程主机,但出现以下错误:

docker -H tcp://{{HOST_IP}}:2375 ps

Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
可能的原因是什么?找到解决方案的正确调试方法是什么

  • 系统:Ubuntu 18.04(客户端和主机)
  • ufw:为所有传入和传出启用(用于测试目的)
  • 访问权限:在客户端和主机上使用root
我所做的

在主机上:

systemctl edit docker.service
docker -H tcp://{{HOST_IP}}:2375 ps

Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
添加并保存以下行:

[Service]
 ExecStart=
 ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
重新加载守护程序:

systemctl daemon-reload
重新启动docker:

systemctl restart docker.service
检查它是否工作:

netstat -lntp | grep dockerd
结果:

tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd
使用docker进行测试:

docker -H tcp://127.0.0.1:2375 ps
这台主机一切正常。但是,当我试图从客户端连接到远程主机时,我遇到了一个错误

在客户端:

systemctl edit docker.service
docker -H tcp://{{HOST_IP}}:2375 ps

Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
通过ssh连接可以工作:

docker -H ssh://root@{{HOST_IP}} ps

您让Docker守护进程监听本地主机地址,
127.0.0.1
。您将无法从远程主机连接到该主机。唯一可以连接到该地址的主机是…本地主机

要使Docker守护进程接受来自远程主机的连接,您可能需要:

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
这意味着“侦听来自所有主机的连接”。但您并不真的希望这样,因为这将授予任何能够连接到该端口的人对您的系统的未经验证的
root
访问权限。您可以使用
iptables
来限制对特定远程主机的访问,但这仍然是一个问题,因为任何能够访问这些主机的人都将再次拥有对Docker主机的未经验证的
root
访问权限

您真正想做的是通读“”,它讨论了如何为到Docker守护程序的远程连接设置基于证书的身份验证。与问题中的示例不同,该文档中讨论的配置要求客户端使用SSL证书进行身份验证


这比允许从任何地方进行未经验证的访问更安全,也比允许从特定主机进行未经验证的访问更安全(因为文件系统所有权和权限可用于限制对授予docker守护进程访问权限所需的SSL私钥的访问).

因此,您已经完成的操作将被授予对当前主机上任何进程的不受限制的根级别访问权限,而您正试图将其向整个网络开放。(如果您在这方面成功了,您可以运行<代码> DOCK-H…-V//主机BasyBox CAT/HOST/ETC/Simult<代码>,以读取该主机上的加密用户密码,作为您可以做的最不可破坏的事情。)立即删除该<代码> DOCKDD -H/COD>选项,并考虑是否需要重新安装系统。谢谢您的回答。澄清一下,最终目标是与远程docker守护进程建立安全的TCP连接。这在第一次尝试时不起作用。为了调试,我使用了来自digitalocean的两个完全空的ubuntu水滴。什么是更好的调试方法?