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

u3r8eeie  于 2023-04-20  发布在  Docker
关注(0)|答案(1)|浏览(171)

我正在开发一个node.js Web应用程序,并使用localhost:8080通过从Postman发送请求来测试它。每当我在不使用Docker的情况下运行应用程序(npm start)时,应用程序都能正常工作,并侦听端口8080
当我使用Docker运行应用程序时,应用程序似乎运行正常(它显示它正在运行并侦听端口8080),但是使用Postman无法访问它(我得到错误:Could not get any response).你知道这可能是什么原因吗?
Dockerfile:

  1. FROM node:8
  2. WORKDIR /opt/service
  3. COPY package.json .
  4. COPY package-lock.json .
  5. RUN npm i
  6. COPY . .
  7. EXPOSE 8080
  8. CMD ["npm", "start"]

我在Docker中构建并运行应用程序,使用:

  1. docker build -t my-app .
  2. docker run my-app

我尝试了如下所述绑定端口,但我也无法访问端口8181上的服务器。

  1. docker run -p 8181:8080 my-app

在我的应用程序中,服务器以以下方式侦听(使用Express):

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

我也试过使用:

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

docker port命令返回:

  1. 8080/tcp -> 0.0.0.0:8181

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

UPDATE:我从docker-machine(192.168.99.100:8181)获取的IP可以访问到应用,但我希望从localhost:8181访问。

kyks70gy

kyks70gy1#

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

  1. docker-machine ip dev

如果你想将容器ipMap到本地主机端口,你应该在端口之前指定本地主机ip,比如this

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

Similar question

相关问题