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

问题描述:

我想在Docker容器内部设置一个开发环境,使用容器编译和运行我的代码,而代码本身驻留在主机上(即我的本地机器)。我已经构建并运行了该映像,但无法连接到该映像。无法连接到托管在主机中的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.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)。

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

ENV NODE_ENV=production 
ENV PORT=4000 

如果这使你打本地主机:4000,那么原因是当你第一次建立生产环境暴露端口4000的图像,并在运行的泊坞窗,撰写文件,再次被指定env作为发展。所以两者都试图暴露4000端口,所以它失败了。