在对演示Express Express js应用进行docker化并启动容器后,由于“连接超时”,我无法访问该服务
在进行docker化之前,for项目的网址(在浏览器中生成了“ Hello world!”):
http://localhost:3000/cars/example/fetchResult
启动docker容器后,该项目的网址(给出“ 172.17.0.2花费了太长时间来响应.”)
http://172.17.0.2:3000/cars/example/fetchResult
Docker文件
FROM node:argon
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 3000
CMD [ "node","server.js" ]
我建立了像
docker build -t prasannarb/example-node-service
我将Docker映像作为一个容器启动
docker run -t prasannarb/example-node-service
然后当我docker ps时,它给了我
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7cf955f5d799 prasannarb/example-node-service "node server.js" About a minute ago Up About a minute 3000/tcp thirsty_perlman
Docker检查7cf955f5d799给我“ IPAddress”:“ 172.17.0.2”
由于我没有明确给出启动容器的端口,因此我假设它所使用的端口与我的docker容器(3000)暴露的端口相同,该端口也是我的服务将侦听的端口.
我在这里做错了什么?
最佳答案
EXPOSE指令通知Docker运行时容器在指定的网络端口上进行侦听. EXPOSE不会使主机可以访问容器的端口.
为此,您必须使用-p标志
您的docker run命令应如下所示:
$docker run -p3000:3000 -t prasannarb/example-node-service
另外,docker inspect命令为您提供了容器IP地址,而不是主机IP地址.