【发布时间】: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