无法从主机连接到Docker容器中托管的快速服务器

时间:2017-10-20 23:47:13

标签: express docker docker-compose

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

我的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,这是使用docker inspect进行检查时容器的IP地址。

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

1 个答案:

答案 0 :(得分:0)

只需从docker file中删除这些行,然后尝试构建并运行。

ENV NODE_ENV=production
ENV PORT=4000

如果这使您能够访问localhost:4000,那么原因是当您第一次构建映像时,生产环境将暴露给端口4000.当您运行docker-compose文件时,您再次将env指定为开发。所以两者都试图暴露给端口4000.所以它失败了。