2017-12-12 6 views
0

Ich verstehe Port Mapping mit -p. Ich verstehe, ich kann nur meinen Containerhafen an einem Port auf dem Host-Netzwerk Karte:Docker Netzwerk: Warum kann ich 2 Container haben, die den gleichen Port geöffnet haben

$ docker run -d -p 8080:80 nginx 

Es kann kein anderer Behälter seinen Hafen auf 8080 Karte, weil es bereits einen Behälter läuft. Dieser Port 8080 auf docker0 Port 80 und so weiter auf Docker-Container-Port zugeordnet werden 80.

Aber ich verstehe wirklich nicht, warum ich eine andere nginx haben:

$ docker -run -d -p 8888:80 

Ich habe zur Karte mein Port an einem anderen Port des Hosts (8888), aber warum kann mein docker0 Netzwerk den Port 80 2 mal öffnen? Es gibt 2 Container dahinter mit Port 80. Ich weiß, dass es funktioniert, aber ich verstehe einfach nicht warum.

Antwort

1

Jeder Container wird in einem separaten Netzwerknamespace ausgeführt. Dies ist eine isolierte Netzwerkumgebung, die keine freigegebenen Netzwerkressourcen (Adressen, Schnittstellen, Routen usw.) mit dem Host teilt. Wenn Sie einen Dienst in einem Container starten, ist es so, als hätten Sie ihn auf einem anderen Computer gestartet.

So wie Sie zwei verschiedene Maschinen in Ihrem Netzwerk mit Web-Servern auf Port 80 laufen haben, können Sie zwei verschiedene Behälter auf dem Host mit Webserver läuft auf Port haben kann 80.

Weil sie in verschiedenen Netzwerk-Namespaces sind, Es gibt keinen Konflikt.

Weitere Lesung am Netzwerk-Namespaces:

Verwandte Themen