2017-03-21 4 views
0

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.

+0

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

+0

Woher kennen Sie die IP-Adresse des Host-Rechners im Container? Bieten Sie es dem Container beim Starten des Containers? – nwinkler

+0

Ja, durch eine ENV-Variable – Miller

Antwort

3

Der Container sollte den Host nicht winden. Es sollte sich selbst kräuseln, da es den Inhalt enthält, den Sie kräuseln möchten.

curl http://127.0.0.1/phpsetup.php?setup

+0

Danke für Ihre Antwort. Kann ich das fragen? – Miller

+1

ist es eine Best Practice. Der Container sollte sich nicht um den Host oder irgendwas in/über dem Host kümmern, sondern sollte eigenständig laufen. Die Ausnahme dafür ist, was der Befehl "docker run" dem Container bereitstellt (Datenvolumes, Umgebungsvariablen und andere Bits) –

+0

Gibt es eine Möglichkeit, die Curl-Operation an der Host-IP noch zuzulassen? Ich verstehe, dass es nicht großartig ist, aber es deckt Randfälle in der PHP-Anwendung ab. – Miller

Verwandte Themen