无法从主机连接到托pipe在Docker容器中的服务器

我试图在Docker容器中设置一个开发环境,使用容器来编译和运行我的代码,而代码本身驻留在主机(即本地机器)上。 我已经构build并运行了该映像,但无法连接到该映像。

我的dockerfile:

# Dockerfile (tag: v3) FROM node:latest WORKDIR /tmp COPY package.json /tmp/ RUN npm config set registry http://registry.npmjs.org/ && npm i WORKDIR /usr/src/app COPY . /usr/src/app/ RUN cp -a /tmp/node_modules /usr/src/app/ && npm run dll ENV NODE_ENV=production ENV PORT=4000 EXPOSE 4000 

然后我的docker-compose文件:

 # docker-compose.yml (tag: v4) web: build: . ports: - "4000:4000" volumes: - .:/usr/src/app/:rw environment: - NODE_ENV=development command: > sh -c ' if test -d node_modules; then echo node_modules_exists ; else cp -a /tmp/node_modules /usr/src/app/website; fi && npm i && npm start ' 

有了这个设置,我希望能够连接到localhost:4000 。 从我的快递应用程序现在正在侦听端口4000的容器的控制台输出。我也尝试使用172.17.0.2:4000 ,这是容器的IP地址与docker inspectdocker inspect

我需要采取什么其他步骤来连接? 我正在使用Linux容器运行Windows 10和Docker 17.09.0-ce-win33(13620)。

只需从docker file删除这些行并尝试构build并运行。

 ENV NODE_ENV=production ENV PORT=4000 

如果这使你能够打localhost:4000,那么原因是当你第一次构build镜像的时候,生产环境暴露在4000端口上。当你运行docker-compose文件时,你又把env指定为development。 所以都试图暴露到4000端口,所以它失败了。