gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:04:20 25 4
gpt4 key购买 nike

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

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

我收到一个错误:

error during connect: Post http://1.2.3.4:2375/v1.29/containers/19f36d1bdfaf/exec: dial tcp 1.2.3.4:2375: connectex: No connection could be made because the target machine actively refused it.

为什么我会收到此错误以及如何解决它?

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 导致错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

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

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

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

最佳答案

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

要对其进行测试,您只需手动启动守护程序(请务必先停止该服务)。假设 1.2.3.4 是运行您要连接的守护进程的主机的 IP。

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

或者将其绑定(bind)到所有网络接口(interface):

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

您可以在此处提供多个 -H 选项,以便在绑定(bind)到 tcp 套接字时不禁用 unix 套接字。有关守护进程绑定(bind)选项的详细信息,请参阅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"
]
}

您可以为主机提供条目列表,以便您的守护进程可以同时监听 tcp 和 unix 套接字。

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

关于docker - 如何连接到在 Ubuntu 主机上运行的远程 docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43481263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com