即使在端口绑定之后,docker上的节点服务器也无法在localhost上访问

scr*_*ius 4 localhost node.js docker graphql

我有graphql节点服务器.我可以在没有docker的情况下在本地运行它.但是在创建服务器的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
Run Code Online (Sandbox Code Playgroud)

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

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

我使用以下命令运行docker:

   docker run -it -p 8080:8080  nodeapi
Run Code Online (Sandbox Code Playgroud)

这完全可以运行nodejs可以看到它显示的env SERVER_PORT

   "listening at 8080"
Run Code Online (Sandbox Code Playgroud)

在控制台中.

但是当我打开localhost:8080时这不起作用(无法访问该站点).

我也尝试过运行docker命令

    docker run -it -p 127.0.0.1:8080:8080  nodeapi
Run Code Online (Sandbox Code Playgroud)

这不起作用

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

谢谢

Tar*_*ani 14

Docker工具箱不会将端口映射到localhost.它将其映射到Docker VM IP

运行以下命令以获取IP

docker-machine ip
Run Code Online (Sandbox Code Playgroud)

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

  • 这非常感谢.但有没有办法将它映射到localhost呢? (3认同)

小智 5

如果您避免指定 IP 0.0.0.0

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

docker run -it -p 8080:8080  nodeapi
Run Code Online (Sandbox Code Playgroud)

它会让你加载网站

http://localhost:8080
Run Code Online (Sandbox Code Playgroud)