2016-06-14 111 views
1

我开始一个容器,比如C1,桥接网络N1:网络名称

docker network create --driver bridge N1 
docker run --net=N1 --name C1 -d some image 

然后,我开始另一个容器,C2,在N2:

docker network create --driver bridge N2 
docker run --net=N1 --name C1 -d some image 

我想启动第三个容器(这将是一个可从端口9090访问的反向代理)C3,以便它可以看到C1:

docker run --net=N1 -p 9090:9090 --name C3 

我可以从C3内部访问C1,它的名字是C1。因此,例如从C3我可以做

curl http://C1 

我可以运行里面C3和端口9090来对C1一些其他端口转发请求,反向代理。

但是,如果我想N2添加到C3:

docker run --net=N1 --net=N2 -p 9090:9090 --name C3 
从C3内

然后,如果我仰望C1或C2,我收到没有发现一台主机:

curl http://C1 
host not found 

什么在这种情况下是C1和C2的名称?

回答

1

要将容器连接到第二个网络,您需要使用docker network connect <network> <container>docker run命令仅支持单个网络。

您可以在容器启动之前或之后执行此操作。一些进程在启动之前需要额外的接口。

docker create --name C3 --net=N1 <image> 
docker network connect N2 C3 
docker start C3 

容器现在有多个接口

$ docker exec C3 ip ad sh 
... 
360: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:14:00:03 brd ff:ff:ff:ff:ff:ff 
    inet 172.20.0.3/16 scope global eth0 
     valid_lft forever preferred_lft forever 
    inet6 fe80::42:acff:fe14:3/64 scope link 
     valid_lft forever preferred_lft forever 
362: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:15:00:03 brd ff:ff:ff:ff:ff:ff 
    inet 172.21.0.3/16 scope global eth1 
     valid_lft forever preferred_lft forever 
    inet6 fe80::42:acff:fe15:3/64 scope link 
     valid_lft forever preferred_lft forever 

容器可以解决,并连接到容器上的两个网络

$ docker exec C3 ping -c 1 C1 
PING ping2 (172.20.0.5): 56 data bytes 
64 bytes from 172.20.0.5: icmp_seq=0 ttl=64 time=0.221 ms 
--- ping2 ping statistics --- 
1 packets transmitted, 1 packets received, 0% packet loss 
round-trip min/avg/max/stddev = 0.221/0.221/0.221/0.000 ms 

$ docker exec C3 ping -c 1 C2 
PING ping1 (172.21.0.5): 56 data bytes 
64 bytes from 172.21.0.5: icmp_seq=0 ttl=64 time=0.177 ms 
--- ping1 ping statistics --- 
1 packets transmitted, 1 packets received, 0% packet loss 
round-trip min/avg/max/stddev = 0.177/0.177/0.177/0.000 ms 

可能更容易使用Docker Compose v2定义设置并在您开始进入多个网络后运行您的环境。

+0

它的工作,实际上我必须在连接N2之前启动C3,但它的工作原理。 但是,这是做什么,因为它也推出C3: 码头运行--net = N1 --net = N2 -p 9090:9090 - 名称C3 –

+0

它将附加到一个只有一个网络,你提供的最后一个网络参数(N2) – Matt

相关问题