Dockerized Node js app无法启动

时间:2016-09-23 16:10:13

标签: node.js macos express docker

将我的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)所显示的那样,这是我的服务也会听的端口。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

EXPOSE指令通知Docker容器在运行时侦听指定的网络端口。 EXPOSE不会使主机可以访问容器的端口。

为此,您必须使用-p标志

您的docker run命令应如下所示:

$docker run -p3000:3000 -t prasannarb/example-node-service

此外,docker inspect命令为您提供容器IP地址,而不是主机IP地址。