如何连接到在Ubuntu主机上运行的远程docker
我按照官方说明在Ubuntu 16.04上安装了Docker,并成功地将registry作为容器运行。 我想远程连接到另一个容器,所以我尝试:
docker -H tcp://1.2.3.4:2375 exec -it 19f36d1bdfaf /bin/bash
我得到一个错误:
连接期间出错:Post http://1.2.3.4:2375/v1.29/containers/19f36d1bdfaf/exec:dial tcp 1.2.3.4:2375:connectex:由于目标机器主动拒绝连接,因此无法build立连接。
经过几个小时的谷歌search没有解决scheme,我不得不提出这个问题到StackOverflow:为什么我得到这个错误,我该如何解决?
docker.json文件包含以下内容:
{ "hosts": [ "tcp://0.0.0.0:2375", "npipe://" ] }
当我查看这些服务时,它看起来像守护进程没有听到tcp://0.0.0.0:2375正如我所期望的(这只是为了testing,我会保护这一点,一旦我能得到它实际工作):
更新:
通过创build一个daemon.json文件(一个docker.json的副本)来部分工作,然后运行:
sudo dockerd
这个问题是,现在的客户端不工作: docker info
导致一个错误:
在unix:///var/run/docker.sock中无法连接到Docker守护进程。 docker守护进程运行吗?
更新和解决scheme:安德烈亚斯的答案帮助我意识到守护进程没有正常运行。 在本文前面的屏幕截图中,docker守护进程没有使用右侧的-H选项启动。 然后我发现这个Github问题解决了这个问题。 所以所需要的只是:
- 编辑/ etc / default / docker中的$ DOCKER_OPTSvariables:
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
(注意这不是很安全,只是为了testing) - 编辑/lib/systemd/system/docker.service文件,方法是在
[Service]
为EnvironmentFile添加一行:EnvironmentFile=-/etc/default/docker
docker,然后更新ExecStart行:ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://
- 重新启动服务
sudo service docker restart
- 使用
systemctl daemon-reload
重启守护systemctl daemon-reload
请注意,我没有添加daemon.json
文件 – 我离开了现有的docker.json
文件。
默认情况下,出于安全原因,docker守护进程不会暴露给外部世界。 当用-H
标志启动docker守护进程时,你当然可以改变这个设置。
要testing它,您可以简单地手动启动守护程序(请务必在之前停止服务)。 假设1.2.3.4是运行守护程序的主机的IP地址。
<path to>/dockerd -H tcp://1.2.3.4:2375
或者将其绑定到所有networking接口:
<path to>/dockerd -H tcp://0.0.0.0:2375
您可以在此处提供多个-H
选项,以便在绑定到tcp套接字时不禁用unix套接字。 有关守护进程绑定选项的详细信息,请参阅文档(将Docker绑定到另一个主机/端口或Unix套接字) 。
要持久保存这个,你可以在daemon.json
文件中configuration守护进程的启动设置,你也可以指定一个主机数组。 请参阅文档(configurationDocker守护程序)和Linuxconfiguration文件 。
{ "hosts": [ "tcp://0.0.0.0:2375", "unix:///var/run/docker.sock" ] }
您可以提供hosts
条目列表,以便守护进程可以同时侦听tcp和unix套接字。
请注意,通过绑定到tcp 0.0.0.0,任何能够连接到你的机器的人都可以远程启动容器,因此几乎可以在你的系统上执行任何操作,比如使用非常糟糕的root用户密码。 你只能做这个testing或在一个孤立/防火墙正确的环境。
安德烈亚斯的回答帮助我意识到守护进程没有正常运行。 在本文前面的屏幕截图中,docker守护进程没有使用右侧的-H选项启动。 然后我发现这个Github问题解决了这个问题。 所以所需要的只是:
- 编辑/ etc / default / docker中的$ DOCKER_OPTSvariables:
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
(注意这不是很安全,只是为了testing) - 编辑/lib/systemd/system/docker.service文件,方法是在
[Service]
为EnvironmentFile添加一行:EnvironmentFile=-/etc/default/docker
docker,然后更新ExecStart行:ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://
- 重新启动服务
sudo service docker restart
请注意,我没有添加daemon.json
文件 – 我离开了现有的docker.json
文件。