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

我正在尝试使用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 

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

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

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

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

请注意,在这样做的时候,你已经给了任何人以及通过电子邮件访问你的Docker API发送给你的任何URL,从而获得了root权限。

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

两种configurationdocker守护进程的方法

1)在/ etc / default / docker文件中configuration

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

2)在/etc/docker/daemon.jsonconfiguration

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

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

configuration端口后重新启动Docker服务。

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