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.