2017-05-19 13 views
1

Ich kann nicht auf einen nodejs-basierten Dienst über http://localhost:8000 zugreifen, der in einem Docker-Image ausgeführt wird. Ich verwende Docker für Mac (https://docs.docker.com/docker-for-mac/)Ich kann nicht auf den im Docker ausgeführten Dienst zugreifen

Ich befolge das Tutorial hier https://nodejs.org/en/docs/guides/nodejs-docker-webapp/.

Der Server auf Port läuft 8000. Ich starte das Docker Bild mit dem folgenden:

$ docker run -p 8000:8000 -d geuis/node-server:latest 

Wenn ich docker ps laufen sehe ich:

CONTAINER ID  IMAGE      COMMAND    CREATED    STATUS    PORTS     NAMES 
9fa2e446918b  geuis/node-server:latest "npm start"   6 seconds ago  Up 5 seconds  0.0.0.0:8000->8000/tcp unruffled_lewin 

Wenn ich docker exec -it 9fa2e446918b /bin/bash ich die Docker vm zugreifen und ich kann curl http://localhost:8000 und Zugriff auf den Server aus dem Container.

Allerdings versuche ich das gleiche curl http://localhost:8000 von meinem System-Terminal und es ist nicht zugänglich.

Nicht sicher, was ich als nächstes tun muss.

+1

Ich versuchte es mit Docker für Mac und es funktioniert. Hast du noch andere Modifikationen außer dem Hafen? – Holger

+0

Können Sie auf den Dienst mit der Standard-Docker-IP zugreifen, .i.e http://192.168.99.100:8000? (oder eine andere IP, wenn Sie eine andere als die Standard-Adresse angegeben haben) – dchar

Antwort

4

Versuchen Sie Folgendes hören Aussage:

app.listen(PORT, '0.0.0.0'); 

Aus der Lektüre der Anleitung Sie es wie Express sieht erwähnen ist auf localhost hören. Dies ist in Ordnung, wenn Sie lokal, aber innerhalb eines Containers arbeiten, localhost ist nicht das gleiche localhost das ist außerhalb des Containers.

0.0.0.0 ist die unspecified IPv4 address und so Express wird auf jeder IP-Adresse binden, die es finden kann, die die IP sein wird, dass Ihre Anforderungen von außerhalb des Containers kommen.

+0

Ja, das war es. Verwenden Sie hapijs anstelle von Express, aber die gleiche Lösung. – Geuis

Verwandte Themen