Verwalten von Container-Port-Konfigurationen
Nachdem wir nun verstanden haben, wie man containerisierte Dienste inspiziert und darauf zugreift, wollen wir einige zusätzliche Konzepte zur Portverwaltung untersuchen.
Häufige Szenarien der Portverwaltung
Hier sind einige gängige Szenarien, denen Sie begegnen könnten:
1. Ändern von Port-Mappings
Wenn Port 8080 bereits auf Ihrem Host verwendet wird, können Sie auf einen anderen Port mappen:
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 8081:80 nginx
Jetzt ist der Nginx-Container über Port 8081 erreichbar:
curl localhost:8081
2. Binden an bestimmte Schnittstellen
Anstatt an alle Schnittstellen (0.0.0.0) zu binden, können Sie an eine bestimmte IP binden:
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 127.0.0.1:8080:80 nginx
Dies bindet den Container-Port nur an die Localhost-Schnittstelle, wodurch er von außerhalb des Hosts nicht zugänglich ist.
3. Verwenden von zufälligen Host-Ports
Wenn es Ihnen egal ist, welcher Host-Port verwendet wird, lassen Sie Docker einen zuweisen:
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -P nginx
Der Flag -P veröffentlicht alle freigelegten Ports auf zufällige Ports auf dem Host.
Überprüfen Sie den zugewiesenen Port:
docker port web-demo
Ausgabe:
80/tcp -> 0.0.0.0:49153
Die genaue Portnummer variiert, aber in diesem Beispiel wurde Port 80 auf Port 49153 gemappt.
Fehlerbehebung bei häufigen Port-Problemen
Hier sind Lösungen für häufige Probleme im Zusammenhang mit Ports:
- Port bereits in Verwendung: Wenn Sie einen Fehler wie "port is already allocated" sehen, wählen Sie einen anderen Port:
docker run -d --name another-web -p 8082:80 nginx
- Container kann keine Verbindung zum Host herstellen: Wenn ein Container eine Verbindung zu einem Dienst auf dem Host herstellen muss, verwenden Sie den speziellen Docker-DNS-Namen
host.docker.internal anstelle von localhost:
docker run --rm alpine ping -c 2 host.docker.internal
- Überprüfen, welcher Prozess einen Port verwendet: Wenn ein Port bereits auf dem Host verwendet wird, finden Sie den Prozess:
sudo lsof -i :8080
Aufräumen
Lassen Sie uns unsere Container aufräumen:
docker stop web-demo redis-demo
docker rm web-demo redis-demo