dan*_*cky 5 tcp docker 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?
Run Code Online (Sandbox Code Playgroud)
可能的原因是什么?寻找解决方案的正确调试方法是什么?
我做了什么
在主机上:
systemctl edit docker.service
Run Code Online (Sandbox Code Playgroud)
添加并保存这些行:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
Run Code Online (Sandbox Code Playgroud)
重新加载守护进程:
systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)
重启泊坞窗:
systemctl restart docker.service
Run Code Online (Sandbox Code Playgroud)
检查它是否有效:
netstat -lntp | grep dockerd
Run Code Online (Sandbox Code Playgroud)
结果:
tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Run Code Online (Sandbox Code Playgroud)
用 docker 测试:
docker -H tcp://127.0.0.1:2375 ps
Run Code Online (Sandbox Code Playgroud)
一切都在主机上工作。但是,当我尝试从客户端连接到远程主机时,出现错误。
在客户端:
docker -H tcp://{{HOST_IP}}:2375 ps
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
Run Code Online (Sandbox Code Playgroud)
通过 ssh 连接有效:
docker -H ssh://root@{{HOST_IP}} ps
Run Code Online (Sandbox Code Playgroud)
您有 Docker 守护进程在本地主机地址 上侦听127.0.0.1。您将无法从远程主机连接到该主机。唯一可以连接到该地址的主机是...本地主机。
要让 Docker 守护进程接受来自远程主机的连接,您可能需要:
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
Run Code Online (Sandbox Code Playgroud)
这意味着“监听来自所有主机的连接”。但您并不真正希望这样做,因为这会授予root能够连接到该端口的任何人未经身份验证的访问您的系统的权限。您可以用来iptables限制仅访问特定的远程主机,但这仍然是一个问题,因为任何能够访问这些主机的人都会再次未经身份验证地root访问您的 Docker 主机。
你真正想做的是阅读“保护 Docker 守护进程套接字”,其中讨论了如何为 Docker 守护进程的远程连接设置基于证书的身份验证。与您问题中的示例不同,该文档中讨论的配置要求客户端使用 SSL 证书进行身份验证。
这比允许从任何地方进行未经身份验证的访问要安全得多,并且比允许来自特定主机的未经身份验证的访问要安全得多(因为文件系统所有权和权限可用于限制对授予 docker 守护程序访问权限所需的 SSL 私钥的访问) )。
| 归档时间: |
|
| 查看次数: |
4554 次 |
| 最近记录: |