Docker mit integriertem PHP-Server

8

Ich versuche, php integrierten Server ( php -S localhost:8080 ) über Docker laufen zu lassen, ich kann jedoch nicht vom Host auf die Seite zugreifen - ich habe immer eine Verbindung zurückgesetzt.

Hier ist ein einfaches Dockerfile, auf dem ich baue:

%Vor%

Ist es überhaupt möglich, diesen Server mit docker auszuführen? Während ich versuchte, es zum Laufen zu bringen, fand ich heraus, dass, wenn nginx installiert und auf diesen Port eingestellt war, es vom Host aus erreichbar ist. Der integrierte PHP-Server scheint vor dem Host verborgen zu sein, kann also keine Anfragen beantworten.

Hat jemand diese Arbeit erfolgreich gemacht?

    
Michal Zimmermann 31.08.2014, 11:13
quelle

1 Antwort

23

Wenn Sie innerhalb des Docker-Containers Ihren Webserver mit php -S localhost:8080 starten, akzeptiert der Webserver nur Verbindungen, die vom Docker-Container selbst stammen.

Um mit dem Webserver über den Docker-Host kommunizieren zu können, müssen Sie zwei Änderungen vornehmen:

  • Fügen Sie in Ihrer Docker-Datei EXPOSE 8080 hinzu, oder fügen Sie beim Ausführen des Containers -p 8080 zur Befehlszeile docker run hinzu. Dies teilt dem Docker-Host mit, dass Ihr Container ein Programm hat, das die Kommunikation auf Port 8080 erwartet
  • Starten Sie den Webserver mit php -S 0.0.0.0:8080 , damit auch Verbindungen von außerhalb des Andockcontainers selbst akzeptiert werden

Sobald ein Container mit diesen Änderungen ausgeführt wird, öffnen Sie ein neues Terminal auf dem Docker-Host und verwenden Sie den Befehl docker ps , um zu sehen, welcher Port auf dem Docker-Host an Port 8080 im Container weitergeleitet wird. Zum Beispiel:

%Vor%

In diesem Beispiel soll der Port 49153 des Andock-Hosts verwendet werden. Dann fragen Sie Ihren Webserver ab, um zu bestätigen, dass Sie mit ihm kommunizieren können:

$ curl http://localhost:49153

    
Thomasleveil 31.08.2014, 20:49
quelle

Tags und Links