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

时间:2017-04-18 20:06:27

标签: docker

我在the official directions之后的Ubuntu 16.04上安装了docker,并成功运行了注册表作为容器。我想远程连接到另一个容器,所以我尝试:

docker -H tcp://1.2.3.4:2375 exec -it 19f36d1bdfaf /bin/bash

我收到错误:

  连接期间出现

错误:发布   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://"
  ]
}

当我查看服务时,看起来守护进程没有像我期望的那样在tcp://0.0.0.0:2375上进行监听(这仅用于测试,一旦我能得到,我就会保护它它实际上工作): enter image description here

更新

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

来部分工作
sudo dockerd

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

  

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

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

  • 编辑/ 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文件。

2 个答案:

答案 0 :(得分:4)

默认情况下,出于安全原因,docker守护程序不会暴露给外部世界。当您使用-H标志启动docker守护程序时,您当然可以更改此设置。

要测试它,您只需手动启动您的守护程序(确保之前停止服务)。假设1.2.3.4是运行您要连接的守护程序的主机的IP。

<path to>/dockerd -H tcp://1.2.3.4:2375

或者将它绑定到所有网络接口:

<path to>/dockerd -H tcp://0.0.0.0:2375

这里可以提供多个-H选项,以便在绑定到tcp套接字时不禁用unix套接字。有关守护程序绑定选项的详细信息,请参阅the docs (Bind Docker to another host/port or a Unix socket)

要永久拥有此功能,您可以在daemon.json文件中配置守护程序启动设置,您也可以在其中指定主机阵列。有关这方面的信息,请参阅the docs (Configure the Docker daemon)Linux configuration File

{
  "hosts": [
    "tcp://0.0.0.0:2375",
    "unix:///var/run/docker.sock"
  ]
}

您可以提供hosts的条目列表,这样您的守护程序就可以同时监听tcp和unix套接字。

请注意,只需绑定到tcp 0.0.0.0,任何能够访问您的计算机的人都可以远程启动容器,因此几乎可以在您的系统上执行任何操作,就像使用非常糟糕的root用户密码一样。您应该只在测试时或在隔离/防火墙的环境中执行此操作。

答案 1 :(得分:1)

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

  • 编辑/ 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

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