在Docker容器中获取代码

这是我的Dockerfile:

FROM node:4 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY code/* /usr/src/app/ EXPOSE 3000 VOLUME /usr/src/app/ 

和我的Docker撰写文件:

 version: '2.0' services: my_service: build: . volumes: - ./app:/usr/src/app ports: - 8102:3000 working_dir: /usr/src/app/ command: node src/app.js restart: always 

当我构build时:

 docker-compose build Building api_core Step 1 : FROM node:4 ---> 93b396996a16 Step 2 : RUN mkdir -p /usr/src/app ---> Using cache ---> e1ee4fd2245d Step 3 : WORKDIR /usr/src/app ---> Using cache ---> 8824a653a9e4 Step 4 : COPY code/* /usr/src/app/ ---> Using cache ---> 5e4ee9901369 Step 5 : EXPOSE 3000 ---> Using cache ---> 0e10126e1651 Step 6 : VOLUME /usr/src/app/ ---> Using cache ---> c1f9d36d91bc Successfully built c1f9d36d91bc 

而当我运行我得到这个错误:

 docker-compose up Error: Cannot find module '/usr/src/app/src/app.js 

所以Docker告诉我,它没有findapp.js,所以就像COPY不工作!

你是对的,你把你的应用程序复制到你的Docker镜像中。

但是在你的- ./app:/usr/src/app compose部分中,你挂载- ./app:/usr/src/app这样你的“./app”文件夹(在你的主机上)中的所有东西都被挂载在/ usr / src / app的docker容器中所以你在dockerfile中复制的内容被挂载点覆盖。

您在撰写文件中明确指定了卷映射:

 volumes: - ./app:/usr/src/app 

这将覆盖你以前在Dockerfile指定的Dockerfile

 COPY code/* /usr/src/app/ 

这两个陈述可能会提供不同的结果,取决于你已经build立的图像和你将启动容器的位置。 你应该检查你的撰写文件的映射是否给出了相同的结果。