2016-02-29 12 views
5

Ich muss einige Docker-Container erstellen, auf die andere Computer im selben Netzwerk zugreifen müssen.Wie kann der Docker-Container über IP für andere Netzwerkgeräte zugänglich gemacht werden?

Problem ist, dass, wenn ich den Container erstellen, bekommt Docker IP-Adressen nur innerhalb der Host-Maschine gültig.

Ich habe bereits einen Blick auf Docker Dokumentation (Networking) aber nichts hat funktioniert.

Wenn ich ifconfig auf meinem Computer laufen lasse, ist meine IP-Adresse 172.21.46.149. Wenn ich in den Container (Ubuntu) gehe und ifconfig starte, lautet die IP-Adresse 172.17.0.2. Ich brauche Docker, um zum Beispiel 172.21.46.150 zu bekommen.

Wie kann ich es tun?

+0

Wäre es in Ordnung, wenn Ihr Container Host-Port direkt zu kommunizieren würde? – Auzias

Antwort

1

Docker Container kann leicht von anderen Netzwerkknoten zugegriffen werden, wenn ein Container: Port über einen Host: Port veröffentlicht wird.

Dies geschieht mit der Option -p docker-run. Hier ist die Summe-up der Mann-Seite ($man docker-run gibt weitere Details und Beispiele, die ich nicht Kopieren/Einfügen):

-p, --publish=[] 
     Publish a container's port, or range of ports, to the host. 

die doc online See. Diese question/answer könnte auch interessant zu lesen sein.

Grundsätzlich gilt:

docker run -it --rm -p 8085:8080 my_netcat nc -l -p 8080

Würde ermöglicht LAN-Knoten zu der Docker-Host-IP verbinden: 8085 und diskutiert mit dem netcat Befehl.

+0

Problem mit dieser Lösung ist, dass, wenn ich meine Umwelt wachsen die Dinge ein bisschen unordentlich werden, denke ich, solange ich viele viele Behälter haben werde ... –

+0

Nun ... Vielleicht möchten Sie Ihre Frage zu bearbeiten, um es dann zu klären. Benötigen Sie tatsächlich alle Container im selben LAN wie das Host-LAN? Ich verstehe den Viele-Container-Grund, aber ich bezweifle, dass der Host mehr als 65k Container laufen lassen wird (wodurch ein Mangel an Sockel entsteht). Denken Sie daran, dass ein Docker Best Practice ist die ["Caas"] (https://stackoverflow.com/questions/35610995/consul-and-tomcat-in-the-same-docker-container#comment58922618_35610995) und nach dem CaaS der Container (der einen einzelnen Dienst ausführen soll) sollte nur einen Port, zwei oder drei in Ausnahmefällen mit Multi-Ports-Service benötigen. – Auzias

2

Multi-Host-Zugang beinhaltet ein Overlay-Netzwerk mit Service Discovery.
Siehe docker/networking:

Ein Overlay-Netzwerk einen Schlüssel-Wert-Speicher erfordert. Der Informationsspeicher enthält Informationen über den Netzwerkstatus, der Erkennung, Netzwerke, Endpunkte, IP-Adressen und mehr enthält.
Die Docker-Engine unterstützt derzeit die Schlüsselwertspeicher Store Consul, etcd, ZooKeeper (Distributed Store) und BoltDB (lokaler Speicher).
In diesem Beispiel wird Consul verwendet.

https://github.com/docker/dceu_tutorials/raw/master/images/tut6-step1.png

Wenn, wenn Ihr die Knoten (die anderen Computer im gleichen Netzwerk) läuft ihr Docker-Daemon mit einem Verweis auf diesen Schlüsselwert zu speichern, werden sie in der Lage sein, mit Containern von anderen Knoten zu kommunizieren .

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://<NODE-0-PRIVATE-IP>:8500/network --cluster-advertise=eth0:2375" 

Sie brauchen nur ein Overlay-Netzwerk zu erstellen:

docker network create -d overlay --subnet=10.10.10.0/24 RED 

(es wird wegen der Schlüssel-Wert-Speicher in allen Computern verfügbar)

Und Ihre Container in diesem Netzwerk ausgeführt werden :

docker run -itd --name container1 --net RED busybox