2013-08-04 34 views
32

我试图使用Docker API从另一台机器连接到docker守护进程。我能够成功地做到这命令:如何从另一台机器连接到Docker API?

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时,为什么我不能连接?

我使用的是流浪VM与Vagrantfile如下: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 
+2

注意,对于泊坞窗官方端口现在** ** 2375:http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search= docker –

回答

59

遇到了类似的问题,有一件事我没有看到这里提到的是,你需要开始搬运工人听网络和Unix套接字两者。主机上的所有常规docker(命令行)命令都假定该套接字。

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

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

+0

我的-H TCP 2375添加到我的服务器,但仍然无法访问另一台电脑,是否有可能出现我的代理错误? – David

+0

是的,这是因为代理。当我将docker服务器的ip添加到no_proxy时,它可以工作。 – David

+1

请不要打开一个不安全的TCP套接字到世界..检查由斯文答案和阅读https://medium.com/@omercnet/dockerized-pwnage-f4cacecfb129#.c1j57qt6n – omercnet

10

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

+0

正确的iptables行应该是什么样子? –

+2

泊坞窗需要用下面的命令来启动,以允许外部连接:'泊坞窗-H = TCP://0.0.0.0://0.0.0.0:4243 -d' –

0

有在配置泊坞窗守护程序端口

1)的/ etc /默认/搬运工文件配置2种方式:

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 - 可以使用任何可访问的地址。

配置端口后,重新启动泊坞窗服务。

其原因将两者用户端口[TCP://127.0.0.1:5000]和默认插座搬运工[UNIX:///var/run/docker.sock]是用户端口允许访问docker API,而默认套接字启用CLI。

相关问题