【问题标题】:Docker node.js app not listening on portDocker node.js 应用程序未侦听端口
【发布时间】:2018-02-15 18:43:58
【问题描述】:

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

当我使用 Docker 运行应用程序时,应用程序似乎运行正常(它显示它正在运行并正在侦听端口 8080),但是使用 Postman 无法访问它(我收到错误:Could not get any response) .你知道这可能是什么原因吗?

Dockerfile:

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

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

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');
})

我也尝试过使用:

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

docker port 命令返回:

8080/tcp -> 0.0.0.0:8181

你们不知道这可能是什么原因吗?

更新:使用我从 docker-machine (192.168.99.100:8181) 获得的 IP,我能够访问该应用程序。但是,我希望能够从localhost:8181 联系到它。

【问题讨论】:

  • 您是否为 docker 机器使用了正确的 IP 地址?
  • @Spidy 我不确定如何检查?
  • 容器有没有错误?使用docker run -name my-container -p 8181:8080 my-app 运行您的服务器,然后运行docker logs my-container
  • @zero298 不,没有错误。当我运行它时,它会记录:listening on port 8080
  • 使用 docker exec -it my-container bash 在容器中创建一个 shell 实例,然后使用 Curl 来验证是否有东西在来宾端口 8080 上监听。

标签: node.js express docker port


【解决方案1】:

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

docker-machine ip dev

如果您想将容器 ip 映射到您的本地主机端口,您应该在端口之前指定本地主机 ip,例如 this:

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

Similar question:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    相关资源
    最近更新 更多