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

时间:2017-10-12 21:43:16

标签: node.js docker localhost graphql

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

这是我的Dockerfile代码:

#include <Eigen/QR>
#include <iostream>

int main()
{
    using namespace Eigen;
    MatrixXf A(MatrixXf::Random(5,3));
    HouseholderQR<MatrixXf> qr(A);
    MatrixXf thinQ = qr.householderQ() * MatrixXf::Identity(5,3);
    std::cout << thinQ << '\n';
}

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

 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

我使用以下命令运行docker:

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

这完全适用于nodejs可以看到env SERVER_PORT,因为它显示

   docker run -it -p 8080:8080  nodeapi

在控制台中。

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

我也尝试过运行docker命令

   "listening at 8080"

这不起作用

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

谢谢

3 个答案:

答案 0 :(得分:12)

Docker工具箱没有将端口映射到localhost。它将它映射到Docker VM IP

运行以下命令获取IP

docker-machine ip

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

答案 1 :(得分:2)

如果您避免指定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

答案 2 :(得分:0)

使用docker quickstart终端启动Docker时,可以看到IP地址。 (您也可以使用“ docker-machine ip”命令了解ip地址)

要访问的URL为http://ip-address:portbinded