将我的demo Express js应用程序停靠并启动容器后,由于"Connection Timeout"
停泊前的for项目的网址( 哪个生成" Hello world!"在浏览器上 ):
http://localhost:3000/cars/example/fetchResult
启动docker容器后项目的Url(提供" 172.17.0.2需要很长时间才能响应。 ")
http://172.17.0.2:3000/cars/example/fetchResult
Dockerfile
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 inspect 7cf955f5d799
给了我"IPAddress": "172.17.0.2"
由于我没有明确地给出一个端口来启动我的容器,我假设它会像我的docker容器(3000)所显示的那样,这是我的服务也会听的端口。
我在这里做错了什么?
答案 0 :(得分:3)
EXPOSE
指令通知Docker容器在运行时侦听指定的网络端口。 EXPOSE
不会使主机可以访问容器的端口。
为此,您必须使用-p
标志
您的docker run
命令应如下所示:
$docker run -p3000:3000 -t prasannarb/example-node-service
此外,docker inspect
命令为您提供容器IP地址,而不是主机IP地址。