我正在开发一个node.js Web应用程序,并使用localhost:8080
通过发送Postman的请求来测试它。每当我在不使用Docker的情况下运行应用程序(npm start)时,应用程序工作正常并侦听端口8080
。
当我使用Docker运行应用程序时,该应用程序似乎正在正常运行(它显示它正在运行并正在侦听端口8080
),但是使用Postman无法访问它(我收到错误:{{ 1}})。你知道这个的原因是什么吗?
Dockerfile:
Could not get any response
我使用以下方法在Docker中构建并运行应用程序:
FROM node:8
WORKDIR /opt/service
COPY package.json .
COPY package-lock.json .
RUN npm i
COPY . .
EXPOSE 8080
CMD ["npm", "start"]
我已尝试绑定端口,如下所述,但我也无法通过端口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');
})
docker port命令返回:
app.listen(8080, '0.0.0.0', () => {
console.log('listening on port 8080');
})
你们有没有想到这可能是什么原因?
更新:使用从docker-machine(8080/tcp -> 0.0.0.0:8181
)获得的IP,我能够访问该应用。但是,我希望能够从192.168.99.100:8181
到达它。
答案 0 :(得分:3)
设置端口分配的方式要求您使用docker machine的IP地址,而不是本地主机。您可以使用以下命令找到您的docker机器:
docker-machine ip dev
如果要将容器ip映射到localhost端口,则应在端口之前指定localhost ip,如this:
docker run -p 127.0.0.1:8181:8080 my-app