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

Eli*_*ias 2 port node.js express docker

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

当我使用 Docker 运行该应用程序时,该应用程序似乎运行正常(它显示它正在运行并侦听 port 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"]
Run Code Online (Sandbox Code Playgroud)

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

docker build -t my-app . 
docker run my-app
Run Code Online (Sandbox Code Playgroud)

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

docker run -p 8181:8080 my-app
Run Code Online (Sandbox Code Playgroud)

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

app.listen(8080, () => {
    console.log('listening on port 8080');
})
Run Code Online (Sandbox Code Playgroud)

我也试过使用:

app.listen(8080, '0.0.0.0', () => {
    console.log('listening on port 8080');
})
Run Code Online (Sandbox Code Playgroud)

docker port 命令返回:

8080/tcp -> 0.0.0.0:8181
Run Code Online (Sandbox Code Playgroud)

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

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

Spi*_*idy 5

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

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

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

docker run -p 127.0.0.1:8181:8080 my-app
Run Code Online (Sandbox Code Playgroud)

类似问题