Ich habe ein Problem mit Docker, die meiner Meinung nach eine Lücke in meinem Wissen über Docker-Netzwerk ist.Curl-Anfrage von Docker-Container zu Host-Timeout
Ich habe ein Docker-Bild mit Nginx und PHP. Die notwendigen Ports sind freigelegt. Hier ist ein vereinfachter Befehl, mit dem ich das Bild ausgeführt habe.
docker run --name php-app -p 80:80 php-app
Das Problem ist, dass für die Installation Setup, die PHP-Anwendung Locken sich die Host-Maschinen öffentliche IP.
Als Beispiel curl http://105.15.25.120/phpsetup.php?setup
Diese IP scheint aus dem Inneren des Behälters, wie curl mal aus
curl -vvv 105.15.25.120
About to connect() to 105.15.25.120 port 80 (#0)
Trying 105.15.25.120...
Connection timed out
Failed connect to 105.15.25.120:80; Connection timed out
Closing connection 0
curl: (7) Failed connect to 105.15.25.120:80; Connection timed out
unerreichbar zu sein, kann ich erfolgreich curl auf andere IP-Adressen aus dem Inneren des Behälters, nur nicht die Gastgeber.
Die Verwendung von curl vom Host-Computer funktioniert einwandfrei und führt zu keinem merkwürdigen Verhalten.
Zur Vereinfachung und zum Testen habe ich das Verhalten mit dem offiziellen nginx-Bild reproduziert, um zu dem Schluss zu kommen, dass es kein Problem mit meinem eigenen Bild ist.
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -p 80:80
Aus meiner Forschung scheint es, ein Routing-Problem zu sein? Nicht sicher.
Ihr Host kann Firewall-Regeln haben, die Verbindungen aus dem Inneren des Docker Behälter verbieten. Überprüfen Sie insbesondere die Regeln in der 'INPUT'-Kette der 'Filter'-Tabelle. – larsks
Woher kennen Sie die IP-Adresse des Host-Rechners im Container? Bieten Sie es dem Container beim Starten des Containers? – nwinkler
Ja, durch eine ENV-Variable – Miller