2016-06-14 79 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

相關問題