Ich habe ein Setup, in dem ich alle Teile meiner Website in Docker-Containern ausführe. Mein Nginx, der Port 80 und 443 abhört, läuft in einem Container.
363292a98545 scivm/nginx-django-scivmcom:latest /usr/bin/supervisord 12 days ago Ghost 0.0.0.0:40001->22/tcp, 88.198.57.112:443->443/tcp, 88.198.57.112:80->80/tcp lonely_feynmann
Ich möchte einen Proxy für einen Dienst in einem anderen Container einrichten. Dieser Container ist an Port 3000 auf dem Host gebunden:
b38c8ef72d0a mazzolino/strider-dind:latest wrapdocker /usr/bin/ 41 minutes ago Up 41 minutes 0.0.0.0:3000->3000/tcp, 22/tcp, 27017/tcp distracted_einstein
Meine iptables auf dem Docker-Host sehen folgendermaßen aus:
root@Ubuntu-1204-precise-64-minimal /var/run # iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:8000
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Innerhalb des Containers kann ich aufgrund der iptables-Konfiguration keine Verbindung zu Port 3000 auf dem Host-Computer herstellen.
Ich möchte Port 3000 nicht für das öffentliche Internet öffnen.
Gibt es eine Möglichkeit, eine direkte Brücke zwischen dem Container und dem Host an Port 3000 zu öffnen?
Oder sollte ich meine iptables so ändern, dass sie aus dem Docker-IP-Bereich akzeptiert werden?
quelle
docker restart your_container
) sollte seine IP-Adresse behalten. Nur wenn Sie einen neuen Container basierend auf einem bestimmten Image ausführen, erhält er eine neue IP (docker run -d image command
).Elias 'Antwort ist richtig, aber der Link ist lang und verwirrend. Hier ist eine einfache Zusammenfassung:
Führen Sie zunächst den zu verknüpfenden Container aus und benennen Sie ihn:
Führen Sie dann den anderen Container aus und verknüpfen Sie ihn mit dem ersten Container:
Die Verbindung vom ersten Container zum zweiten Container wird hergestellt
/etc/hosts
. Sie können es also wie einen Hostnamen verwenden. Beispielsweise:quelle