在Docker容器中获取代码

时间:2016-08-03 08:17:48

标签: docker docker-compose dockerfile

这是我的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 Compose文件:

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

当我进行构建时:

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告诉我它没有找到app.js,所以就像COPY没有工作一样!

2 个答案:

答案 0 :(得分:2)

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

但是在你的docker compose部分中,你挂载了- ./app:/usr/src/app所以#34; ./ app"文件夹(在您的主机上)安装在/ usr / src / app的docker容器中,因此您在dockerfile中复制的内容会被挂载点覆盖。

答案 1 :(得分:1)

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

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

这将覆盖您之前在Dockerfile中指定的内容:

COPY code/* /usr/src/app/

两种语句可能会提供不同的结果,具体取决于您构建映像的位置以及启动容器的位置。您应该检查与您的撰写文件映射的内容是否会产生相同的结果。