Docker node.js应用程序没有侦听端口

时间:2018-02-15 18:43:59

标签: node.js express docker port

我正在开发一个node.js Web应用程序,并使用localhost:8080通过发送Postman的请求来测试它。每当我在不使用Docker的情况下运行应用程序(npm start)时,应用程序工作正常并侦听端口8080

当我使用Docker运行应用程序时,该应用程序似乎正在正常运行(它显示它正在运行并正在侦听端口8080),但是使用Postman无法访问它(我收到错误:{{ 1}})。你知道这个的原因是什么吗?

Dockerfile:

Could not get any response

我使用以下方法在Docker中构建并运行应用程序:

FROM node:8  
WORKDIR /opt/service
COPY package.json .
COPY package-lock.json .
RUN npm i
COPY . .
EXPOSE 8080
CMD ["npm", "start"]

我已尝试绑定端口,如下所述,但我也无法通过端口docker build -t my-app . docker run my-app 访问服务器。

8181

在我的应用程序中,服务器以下列方式进行侦听(使用docker run -p 8181:8080 my-app ):

Express

我也尝试过使用:

app.listen(8080, () => {
    console.log('listening on port 8080');
})

docker port命令返回:

app.listen(8080, '0.0.0.0', () => {
    console.log('listening on port 8080');
})

你们有没有想到这可能是什么原因?

更新:使用从docker-machine(8080/tcp -> 0.0.0.0:8181 )获得的IP,我能够访问该应用。但是,我希望能够从192.168.99.100:8181到达它。

1 个答案:

答案 0 :(得分:3)

设置端口分配的方式要求您使用docker machine的IP地址,而不是本地主机。您可以使用以下命令找到您的docker机器:

docker-machine ip dev

如果要将容器ip映射到localhost端口,则应在端口之前指定localhost ip,如this

docker run -p 127.0.0.1:8181:8080 my-app

Similar question