如何连接到在Ubuntu主机上运行的远程docker

riq*_*ang 5 docker

我按照官方指示在Ubuntu 16.04上安装了docker,并成功运行了注册表作为容器.我想远程连接到另一个容器,所以我尝试:

docker -H tcp://1.2.3.4:2375 exec -it 19f36d1bdfaf /bin/bash
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

连接期间出错:发布 http://1.2.3.4:2375/v1.29/containers/19f36d1bdfaf/exec:拨打tcp 1.2.3.4:2375:connectex:无法建立连接,因为目标计算机主动拒绝连接.

经过几个小时的谷歌搜索没有解决方案我被迫向StackOverflow提出这个问题:为什么我会收到此错误,我该如何解决?

docker.json文件包含以下内容:

{
  "hosts": [
    "tcp://0.0.0.0:2375",
    "npipe://"
  ]
}
Run Code Online (Sandbox Code Playgroud)

当我查看服务时,看起来守护进程没有像我期望的那样在tcp://0.0.0.0:2375上进行监听(这只是用于测试,一旦我能够实际工作,我将保证这一点): 在此输入图像描述

更新:

通过创建daemon.json文件(docker.json的副本),然后运行:部分工作

sudo dockerd
Run Code Online (Sandbox Code Playgroud)

这个问题是现在客户端不起作用:docker info导致错误:

无法在unix:///var/run/docker.sock连接到Docker守护程序.docker守护程序是否正在运行?

更新和解决方案: Andreas的回答帮助我意识到守护进程没有正常运行.查看本文前面的截图,未使用右-H选项启动docker守护程序.然后我发现这个Github问题解决了这个问题.所以需要的只是:

  • 编辑/ etc/default/docker中的$ DOCKER_OPTS变量:( DOCKER_OPTS="-H tcp://0.0.0.0:2375"请注意,这不是很安全,只是用于测试)
  • 编辑/lib/systemd/system/docker.service文件,[Service]为EnvironmentFile 添加一行:EnvironmentFile=-/etc/default/docker然后更新ExecStart行:ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://
  • 重启服务 sudo service docker restart
  • 用,重启守护进程 systemctl daemon-reload

请注意,我没有添加daemon.json文件 - 我离开了现有docker.json文件.

riq*_*ang 2

安德烈亚斯的回答帮助我意识到守护进程没有正常运行。查看本文前面的屏幕截图,docker 守护进程没有使用正确的 -H 选项启动。然后我发现这个Github问题解决了这个问题。所以所需要的只是:

  • 编辑 /etc/default/docker 中的 $DOCKER_OPTS 变量:(DOCKER_OPTS="-H tcp://0.0.0.0:2375"注意这不是很安全,只是为了测试)
  • [Service]编辑 /lib/systemd/system/docker.service 文件,在 EnvironmentFile下添加一行:EnvironmentFile=-/etc/default/docker然后更新 ExecStart 行:ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://
  • 重新启动服务sudo service docker restart

请注意,我没有添加daemon.json文件——我保留了现有docker.json文件。