Verbindung vom Docker-Container zum Docker-Host herstellen

Verbindung vom Docker-Container zum Docker-Host herstellen

Ich habe ein Setup, bei dem ich alle Teile meiner Website in Docker-Containern betreibe. Mein Nginx, das auf Port 80 und 443 lauscht, 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         

Aufgrund der iptables-Konfiguration kann ich innerhalb des Containers keine Verbindung zum Port 3000 auf dem Hostcomputer herstellen.

Ich möchte Port 3000 nicht für das öffentliche Internet öffnen.

Gibt es eine Möglichkeit, auf Port 3000 eine direkte Brücke zwischen dem Container und dem Host zu öffnen?

Oder sollte ich meine Iptables so ändern, dass sie den Docker-IP-Bereich akzeptieren?

Antwort1

Alles was Sie brauchen ist DockersLink-Funktionen[veraltet]

Befreien Sie sich einfach von all dem komplizierten Zeug, das Sie bisher versucht haben, und beginnen Sie mit der Verwendung benannter Container, die Sie dann miteinander verknüpfen.

Antwort2

Elias' Antwort ist richtig, aber der Link ist lang und verwirrend. Hier ist eine einfache Zusammenfassung:

Führen Sie zunächst den Container aus, auf den Sie eine Verknüpfung herstellen möchten, und benennen Sie ihn:

sudo docker run -d --name db training/postgres

Führen Sie dann den anderen Container aus und verknüpfen Sie ihn mit dem ersten Container:

sudo docker run -d -P --name web --link db:db training/webapp python app.py

Der Link vom ersten Container zum zweiten Container wird in eingefügt /etc/hosts. Sie können es also wie einen Hostnamen verwenden. Beispiel:

sudo docker run --name web --link db:db training/webapp ping db

verwandte Informationen