我正在开发一个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
你们知道这是什么原因吗?
UPDATE:我从docker-machine(192.168.99.100:8181
)获取的IP可以访问到应用,但我希望从localhost:8181
访问。
1条答案
按热度按时间kyks70gy1#
设置端口分配的方式要求您使用docker机器的ip地址,而不是您的localhost。您可以使用以下命令查找docker机器的ip:
如果你想将容器ipMap到本地主机端口,你应该在端口之前指定本地主机ip,比如this:
Similar question: