2017-05-19 71 views
1

我无法通过在泊坞窗镜像中运行的http://localhost:8000访问基于nodejs的服务。我正在使用适用于Mac的Docker(https://docs.docker.com/docker-for-mac/无法访问在Docker中运行的服务

我在此处教程https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

服务器在端口8000上运行我用下面的启动泊坞窗图像:

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

如果我跑docker ps我看到:

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 

如果我docker exec -it 9fa2e446918b /bin/bash我可以访问该泊坞窗VM我可以curl http://localhost:8000并从容器内访问服务器。

但是,我尝试从我的系统终端尝试相同的curl http://localhost:8000并且无法访问。

不知道接下来我需要做什么。

+1

我试图与码头为Mac和它的作品。除港口外,您还有其他修改吗? – Holger

+0

您可以使用默认的Docker IP,.i.e http://192.168.99.100:8000访问该服务吗? (或任何其他IP,如果您指定了默认值以外的其他IP) – dchar

回答

4

请尝试以下听声明:

app.listen(PORT, '0.0.0.0'); 

从阅读你所提到的教程,它看起来像表达的是侦听localhost。如果您在本地运行但在容器内运行,这很好,localhost与容器外部的localhost不一样。

0.0.0.0unspecified IPv4 address所以Express将绑定在它可以找到的任何IP上,这将是您的请求从容器外部进入的IP。

+0

是的,这是它。使用hapijs而不是Express,但使用相同的解决方案。 – Geuis