我无法通过在docker镜像中运行的http://localhost:8000
访问基于nodejs的服务。我正在使用Docker for Mac(https://docs.docker.com/docker-for-mac/)
我按照这里的教程https://nodejs.org/en/docs/guides/nodejs-docker-webapp/。
服务器在端口8000上运行。我使用以下命令启动docker镜像:
$ 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
我可以访问docker vm,我可以curl http://localhost:8000
并从容器内部访问服务器。
但是,我从我的系统终端尝试相同的curl http://localhost:8000
并且无法访问它。
不确定接下来我需要做什么。
答案 0 :(得分:5)
尝试以下listen语句:
app.listen(PORT, '0.0.0.0');
从阅读教程中你提到它看起来像是正在聆听localhost
。如果您在本地运行但在容器内,localhost
与容器外的localhost
不同,则此功能正常。
0.0.0.0
是unspecified IPv4 address,因此Express将绑定在它可以找到的任何IP上,这将是您的请求从容器外部进入的IP。