2016-08-03 2 views
0

이 내 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/ 

그리고 내 도커 파일 작성 : 내가 빌드 할 때

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 

및 I 실행 오류 :

docker-compose up 

Error: Cannot find module '/usr/src/app/src/app.js 

Docker가 app.js를 찾지 못했음을 알려 주므로 COPY가 작동하지 않는 것과 같습니다!

+0

만든 docker 이미지를 실행하고이 경로가 존재하는지 확인해 보셨습니까? –

답변

2

네가 맞다. 도커 이미지 안에 앱을 복사한다.

도커 작성 섹션에서 - ./app:/usr/src/app을 마운트하면 호스트의 "./app"폴더에있는 모든 항목이/usr/src/app의 도커 컨테이너에 마운트되므로 사용자가 복사 한 내용 dockerfile은 마운트 지점에 의해 무시됩니다.

+0

이것을 사용하여 코드를 외부 저장소에 탑재하고 싶습니다. 어떻게 그럴 수 있니? – 4m1nh4j1

+0

/usr/src/app가 비어있는 경우 몇 가지 옵션이 있습니다. 폴더 (/ usr/src/originalapp)와 cp/usr/src/originalapp/usr/src/app에 데이터를 넣을 수 있습니다 –

1

당신은 명시 적으로 작성 파일에 볼륨 매핑을 지정하는 : 두 문에 따라 다른 결과를 제공 할 수

COPY code/* /usr/src/app/ 

:

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

이것은 이전에 Dockerfile에서 지정하는 것을 우선합니다 이미지를 빌드 한 곳과 컨테이너를 시작할 위치. 작성 파일로 맵핑 된 것이 동일한 결과를 제공하는지 확인해야합니다.