Docker上的节点服务器即使在端口绑定后也不能在本地主机上访问

我有graphql节点服务器。 我可以在没有docker的情况下在本地运行它。 但是在创build服务器的docker容器并将容器端口与主机端口绑定后,这不起作用。

这是我的Dockerfile代码:

FROM node:boron-alpine WORKDIR /app COPY package.json /app RUN npm install COPY . /app ENV SERVER_PORT 8080 EXPOSE 8080 CMD npm run build && npm start 

我的节点服务器代码是这样的:

  app.listen(process.env.SERVER_PORT,'0.0.0.0') console.log(`listening at ${port}`) 

我使用以下命令运行docker:

  docker run -it -p 8080:8080 nodeapi 

这完美的工作nodejs可以看到env SERVER_PORT导致它显示

  "listening at 8080" 

在控制台。

但是当我打开本地主机:8080这不起作用(该网站无法到达)。

我也尝试运行docker命令

  docker run -it -p 127.0.0.1:8080:8080 nodeapi 

这不起作用

我在Windows 10最新版本上使用docker工具箱

谢谢

Docker工具箱不会将端口映射到本地主机。 它将其映射到Docker VM IP

运行下面的命令获取IP

 docker-machine ip 

然后在浏览器中使用http://<IP>:8080

如果您避免指定IP 0.0.0.0

 app.listen(process.env.SERVER_PORT, function () { console.log('Listening on port '+ process.env.SERVER_PORT); }); 

 docker run -it -p 8080:8080 nodeapi 

它会让你加载该网站

 http://localhost:8080