2016-06-14 7 views
1

ich einen Behälter fange, sagen C1, auf einem überbrückten Netzwerk N1:Netzwerkname von Containern auf mehreren Brücken

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

Dann beginne ich einen anderen Behälter, C2, auf N2:

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

ich möchte einen dritten Behälter starten C3 (die ein Reverse-Proxy erreichbar von Port 9090 sein wird), so dass es C1 sehen:

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

Ich habe dann Zugriff auf C1 von innen C3, und sein Name ist C1. aus Richtung Port 9090 zu einigen anderen Ports auf C1 So zum Beispiel von C3 kann ich

curl http://C1 

Ich kann dann ein Reverse-Proxy innerhalb C3 und Vorwärts-Anfrage ausgeführt werden.

Aber wenn ich N2 C3 hinzufügen möchten:

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

dann aus dem Inneren von C3, wenn ich C1 oder C2 nachzuschlagen, erhalte ich einen Host nicht gefunden:

curl http://C1 
host not found 

Was sind in diesem Fall die Namen von C1 und C2?

Antwort

1

Um einen Container mit einem zweiten Netzwerk zu verbinden, müssen Sie docker network connect <network> <container> verwenden. Der Befehl docker run unterstützt nur ein einzelnes Netzwerk.

Sie können dies vor oder nach dem Start des Containers tun. Einige Prozesse benötigen die zusätzliche Schnittstelle, bevor sie gestartet werden.

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

Der Behälter sind nun mehrere Schnittstellen

$ 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 

Der Behälter kann an Behältern in beiden Netzwerken lösen und verbinden

$ 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 

Es könnte einfacher sein, eine Docker Compose v2 Definition-Setup zu verwenden, und führen Sie Ihre Umgebung aus, sobald Sie in mehrere Netzwerke gelangen.

+0

Es funktioniert, eigentlich muss ich C3 vor dem Anbringen von N2 starten, aber es funktioniert. Aber was macht das dann, da es auch C3 startet: docker run --net = N1 --net = N2 -p 9090: 9090 --name C3 –

+0

Es wird an ein einziges Netzwerk angeschlossen, das Letztes Netzwerkargument, das Sie angeben (N2) – Matt

Verwandte Themen