So greifen Sie von einem Docker-Container aus auf Ports auf dem Host zu

0
216

Wenn Sie sich mit der Außenwelt vernetzen, verhält sich Docker wie wenn die Anfrage vom Host-Rechner kam. Wenn Sie jedoch auf Prozesse zugreifen möchten, die auf dem Host ausgeführt werden, benötigt Ihre Firewall möglicherweise eine zusätzliche Konfiguration.

Die Lösung: Fügen Sie eine Firewall-Regel für 172.18 . hinzu .0.0/16

Wenn Sie gerade versucht haben, auf einen Prozess zuzugreifen, der auf dem Hostcomputer wie einen HTTP-Dienst ausgeführt wird, wurden Sie möglicherweise blockiert. Dies liegt daran, dass Docker-Container zwar auf dem Host ausgeführt werden, jedoch ein spezielles Netzwerk unter der Haube verwenden, um sie logisch getrennt zu halten, und daher unterschiedliche IP-Adressen haben.

Sie können dies sehen, wenn Sie ifconfig ausführen , sehen Sie Ihre Standard-Netzwerkschnittstelle, aber auch die docker0-Schnittstelle. Standardmäßig verwendet Docker den Block 172.18.0.0/16, um Container-IP-Adressen zuzuweisen.

Der Fix ist sehr einfach—öffnen Sie diesen Portbereich in Ihrer Firewall. Anfragen aus dem von Docker verwendeten IP-Bereich werden wahrscheinlich blockiert. Da es sich um einen privaten IP-Adressbereich handelt, besteht ein minimales Risiko, ihn geöffnet zu haben. Für UFW wäre das:

sudo ufw allow from 172.18.0.0/24

Optional Angabe eines zu öffnenden Ports:

sudo ufw allow from 172.18.0.0/24 an einen beliebigen Port 9200

Für iptables wäre das:

iptables –append INPUT –protocol tcp –src 172.18.0.0/24 –jump DROP

Für verwaltete Hosting-Dienste wie AWS muss möglicherweise nichts geändert werden—Sicherheitsgruppen sind Netzwerk-Firewalls, die vor Instanzen sitzen und den internen Datenverkehr nicht beeinträchtigen sollten.