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.
您设置端口分配的方式要求您使用 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)
类似问题:
| 归档时间: |
|
| 查看次数: |
6454 次 |
| 最近记录: |