如何从另一台机器连接到Docker API?

时间:2013-08-04 01:39:52

标签: vagrant iptables docker

我正在尝试使用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虚拟机以及以下内容: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

4 个答案:

答案 0 :(得分:61)

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

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

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

答案 1 :(得分:11)

您需要收听0.0.0.0。当你在127.0.0.1上收听时,这意味着主机外没有人能够连接。

答案 2 :(得分:10)

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

您应该至少使用https:http://docs.docker.com/articles/https/

保护您的套接字

答案 3 :(得分:1)

配置docker守护程序端口有 2种方法

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。

相关问题