7.1 Grundlagen der Port-Weiterleitung (Port forwarding)
Port-Weiterleitung ist eine wichtige Funktion von Docker, die es ermöglicht, dass Anwendungen innerhalb von Containern von außen zugänglich sind. Diese Funktion wird benötigt, um sich mit Webservern, Datenbanken oder anderen Diensten zu verbinden, die in Containern laufen, sei es von der Host-Maschine oder sogar aus anderen Netzwerken.
Standardmäßig arbeiten Container in einem isolierten Netzwerk. Damit ein Dienst im Container zugänglich ist, leitet Docker die Ports des Containers auf Ports der Host-Maschine weiter.
Für die Port-Weiterleitung wird der Parameter -p
oder --publish
des Befehls docker run
verwendet.
Syntax
docker run -p [HOST_PORT]:[CONTAINER_PORT] [OPTIONS] IMAGE [COMMAND] [ARG...]
Wo:
- HOST_PORT: Port auf der Host-Maschine, über den der Traffic läuft.
- CONTAINER_PORT: Port innerhalb des Containers, auf den der Traffic weitergeleitet wird.
- OPTIONS: zusätzliche Parameter zur Konfiguration des Containers.
- IMAGE: Image, aus dem der Container erstellt wird.
- COMMAND: Befehl, der innerhalb des Containers ausgeführt wird.
- ARG...: Argumente für den Befehl.
Ein einfaches Beispiel
In diesem Beispiel wird Port 80 des Containers, in dem ein Nginx-Webserver läuft, auf den Port 8080 der Host-Maschine weitergeleitet. Danach kannst du den Webserver im Browser unter http://localhost:8080 öffnen.
docker run -d -p 8080:80 nginx
7.2 Andere Optionen der Portweiterleitung
1. Mehrfache Portweiterleitung
Docker ermöglicht es, mehrere Ports gleichzeitig weiterzuleiten. Dafür werden mehrere -p
-Optionen verwendet.
Beispiel
In diesem Beispiel wird der Port 80 des Containers auf den Port 8080 des Hosts weitergeleitet und der Port 443 des Containers auf den Port 8443 des Hosts.
docker run -d -p 8080:80 -p 8443:443 nginx
2. Portweiterleitung mit spezifischer IP-Adresse
Du kannst eine spezifische IP-Adresse angeben, an die der weitergeleitete Port gebunden wird. Das ist besonders nützlich, wenn die Host-Maschine mehrere Netzwerkschnittstellen hat und der Zugriff auf den Container eingeschränkt werden soll.
Beispiel:
In diesem Beispiel wird der Port 80 des Containers auf den Port 8080 nur auf der Schnittstelle 127.0.0.1
der Host-Maschine weitergeleitet. Das bedeutet, dass der Zugriff auf den Service nur von der Host-Maschine selbst aus möglich ist.
docker run -d -p 127.0.0.1:8080:80 nginx
3. Weiterleitung eines Portbereichs
Wenn mehrere Ports gleichzeitig weitergeleitet werden sollen, unterstützt Docker die Arbeit mit Portbereichen.
Beispiel:
In diesem Beispiel werden die Ports von 7000
bis 8000
des Containers auf die Ports von 7000
bis 8000
der Host-Maschine weitergeleitet.
docker run -d -p 7000-8000:7000-8000 someimage
7.3 Praktische Anwendungsfälle
1. Zugriff auf einen Webserver
Portweiterleitung wird häufig verwendet, um Zugriff auf Webserver zu schaffen, die innerhalb von Containern laufen.
docker run -d -p 8080:80 nginx
Nach dem Ausführen dieses Befehls wird der Nginx-Webserver, der auf Port 80 des Containers läuft, auf Port 8080 der Host-Maschine verfügbar.
2. Zugriff auf eine Datenbank
Portweiterleitung ist auch nützlich, um auf Datenbanken zuzugreifen, die innerhalb von Containern laufen.
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword postgres
In diesem Beispiel wird PostgreSQL, das auf Port 5432 des Containers läuft, auf Port 5432 der Host-Maschine zugänglich gemacht.
3. Testen und Entwicklung
Docker-Container werden oft genutzt, um isolierte Testumgebungen zu schaffen. Portweiterleitung ermöglicht es Entwicklern, Anwendungen so zu starten und zu testen, als würden sie in einer echten Produktionsumgebung laufen.
docker run -d -p 8080:80 -p 8443:443 myapp
In diesem Beispiel wird die Anwendung auf den Ports 8080 und 8443 getestet, was den Standardports in einer Produktionsumgebung entspricht.
7.4 Zusätzliche Empfehlungen
1. Schutz der Ports
Wenn du Ports weiterleitest, vergiss die Sicherheit nicht. Offene Ports können Ziel von Angriffen werden. Leite nur die Ports weiter, die wirklich benötigt werden, und verwende eine Firewall, um den Zugriff einzuschränken.
2. Firewalls und NAT
Um den Schutz zu erhöhen und den Traffic zu steuern, verwende Firewalls und Network Address Translation (NAT). Das ermöglicht es dir, den Zugriff auf deine Dienste einzuschränken und Netzwerkverbindungen zu kontrollieren.
3. Monitoring und Logs
Richte Monitoring und Log-Sammlung ein, um den Traffic auf weitergeleiteten Ports zu überwachen. Das hilft dir, verdächtige Aktivitäten schneller zu erkennen und darauf zu reagieren.
GO TO FULL VERSION