【问题标题】:How to connect to Docker API from another machine?如何从另一台机器连接到 Docker API?
【发布时间】:2013-08-05 00:40:31
【问题描述】:

我正在尝试使用 Docker API 从另一台机器连接到 docker 守护程序。我能够成功执行此命令:

docker -H=tcp://127.0.0.1:4243 images

但不是当我使用真实 IP 地址时:

docker -H=tcp://192.168.2.123:4243 images
2013/08/04 01:35:53 dial tcp 192.168.2.123:4243: connection refused

为什么我使用非本地 IP 时无法连接?

我在 Vagrantfile 中使用带有以下内容的 Vagrant VM:config.vm.network :private_network, ip: "192.168.2.123"

以下是iptables:

# Generated by iptables-save v1.4.12 on Sun Aug  4 01:24:46 2013
*filter
:INPUT ACCEPT [1974:252013]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1511:932565]
-A INPUT -p tcp -m tcp --dport 4243 -j ACCEPT
COMMIT
# Completed on Sun Aug  4 01:24:46 2013
# Generated by iptables-save v1.4.12 on Sun Aug  4 01:24:46 2013
*nat
:PREROUTING ACCEPT [118:8562]
:INPUT ACCEPT [91:6204]
:OUTPUT ACCEPT [102:7211]
:POSTROUTING ACCEPT [102:7211]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.16.42.0/24 ! -d 172.16.42.0/24 -j MASQUERADE

【问题讨论】:

标签: vagrant iptables docker


【解决方案1】:

2种方式配置docker daemon端口

1) 在/etc/default/docker文件配置:

DOCKER_OPTS="-H tcp://127.0.0.1:5000 -H unix:///var/run/docker.sock"

2) 在/etc/docker/daemon.json 配置:

{
"hosts": ["tcp://<IP-ADDRESS>:<PORT>", "unix:///var/run/docker.sock"]
}

IP-ADDRESS - 可以使用任何可访问的地址。

配置端口后重启docker服务。

同时添加用户端口[tcp://127.0.0.1:5000]默认docker socket[unix:///var/run/docker.sock]的原因 是用户端口启用对 docker API 的访问,而默认套接字启用 CLI。

【讨论】:

  • 注意:hosts 不能在 Docker for Windows 中使用。
【解决方案2】:

请注意,在执行此操作时,您已授予任何人以及通过电子邮件发送给您的任何 URL 访问您的 Docker API 的权限,从而获得 root 权限。

您至少应该使用 https 保护您的套接字:http://docs.docker.com/articles/https/

【讨论】:

    【解决方案3】:

    遇到了类似的问题,我没有看到这里提到的一件事是你需要启动 docker 来监听网络和 unix 套接字。主机上的所有常规 docker(命令行)命令都假定套接字。

    sudo docker -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -d &
    

    将启动 docker 监听主机上的任何 IP 地址,以及典型的 unix 套接字。

    【讨论】:

    【解决方案4】:

    您需要收听 0.0.0.0。当您在 127.0.0.1 上收听时,这意味着您的主机之外的任何人都无法连接。

    【讨论】:

    • Docker 需要使用以下命令启动以允许外部连接:docker -H=tcp://0.0.0.0:4243 -d
    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2013-01-16
    • 2020-07-16
    相关资源
    最近更新 更多