2017-02-04 2 views
1

나는 도커를 처음 사용하며 사용자 정의 이미지를 만들었습니다. 여기내 로컬 소스 파일을 도커 컨테이너에 마운트하는 방법은 무엇입니까?

는 이미지가 구축 된 후 그때

docker build -t test/node . 

로 이미지를 구축 내 Dockerfile

FROM node:latest 

MAINTAINER FF 

COPY . /var/www 

WORKDIR /var/www 

RUN npm install 

EXPOSE 3000 

ENTRYPOINT ["npm", "start"] 

있습니다 나는 싶어서 -v 사용

docker run -p 8888:3000 -v $(pwd):/var/www -w "/var/www" test/node 

를 실행 내 호스트 src 폴더를 /var/www에 마운트하십시오.

은 내가 문제가 내 src 폴더가 명시 모듈이없는 생각하지만 난 이미 NPM 내 이미지에서 설치 않았다

> [email protected] start /var/www 
> node ./bin/www 

module.js:472 
    throw err; 
    ^

Error: Cannot find module 'express' 
    at Function.Module._resolveFilename (module.js:470:15) 
    at Function.Module._load (module.js:418:25) 
    at Module.require (module.js:498:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (/var/www/app.js:1:77) 
    at Module._compile (module.js:571:32) 
    at Object.Module._extensions..js (module.js:580:10) 
    at Module.load (module.js:488:32) 
    at tryModuleLoad (module.js:447:12) 
    at Function.Module._load (module.js:439:3) 

npm info lifecycle [email protected]~start: Failed to exec start script 
npm ERR! Linux 4.4.39-moby 
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "start" 
npm ERR! node v7.4.0 
npm ERR! npm v4.0.5 
npm ERR! code ELIFECYCLE 
npm ERR! [email protected] start: `node ./bin/www` 
npm ERR! Exit status 1 
npm ERR! 
npm ERR! Failed at the [email protected] start script 'node ./bin/www'. 
npm ERR! Make sure you have the latest version of node.js and npm installed. 
npm ERR! If you do, this is most likely a problem with the expresssite package, 
npm ERR! not with npm itself. 
npm ERR! Tell the author that this fails on your system: 
npm ERR!  node ./bin/www 
npm ERR! You can get information on how to open an issue for this project with: 
npm ERR!  npm bugs expresssite 
npm ERR! Or if that isn't available, you can get their info via: 
npm ERR!  npm owner ls expresssite 
npm ERR! There is likely additional logging output above. 
npm WARN Local package.json exists, but node_modules missing, did you mean to install? 

npm ERR! Please include the following file with any support request: 
npm ERR!  /var/www/npm-debug.log 

로 돌아와서 나는 내가 필요로하는 모든입니다 생각했다.

내가 뭘 잘못 했니? 아무도 그것에 대해 나를 도울 수 있습니까? 정말 고마워!

+1

'복사'는 논리적이지 않습니다./ var/www'와'docker run'에서'-v $ (pwd) :/var/www' 명령을 사용하면 COPY가 지운 내용을 지울 수 있습니다. – user2915097

답변

2

문제는

  • NPM 따라서 (이미지 내에서 실행 설치

    1. 당신은 이미지 생성시 도커 이미지에 소스 코드를 복사 무슨 일이 일어나고 무엇 COPY의 조합 볼륨

      입니다 소스 코드에 영향을 미치지 않음)

    2. 그러나 볼륨을 마운트 할 때/var/www를 효과적으로 오버라이드하여 1 단계와 2 단계를 효과적으로 만듭니다.

    docker를 시작하기 전에 또는 내부에서 npm install을 실행하면됩니다.

  • +0

    감사합니다. npm 설치 문제를 해결했지만 어떻게해야합니까? 내 현재 소스 폴더를 컨테이너에 마운트하여 소스 코드를 업데이트 할 때마다 컨테이너를 업데이트합니다. +1 – FlyingCat

    2

    이미지 내에서/var/www 폴더에 npm 설치를 실행 한 이미지를 만들었습니다. 이 설치는 호스트 파일 시스템에서 발생하지 않았습니다.

    그런 다음 이미지를 사용하여 컨테이너를 회전시키고 호스트 파일 시스템을/var/www에 마운트했습니다. 이미지의 해당 위치에있는 모든 항목이 오버레이되므로 해당 위치에서 수행 한 이전 설치는 호스트에서 실행하지 않으면 표시되지 않습니다.

    • 당신은 아마 모든 코드는 서브 디렉토리로 전환, 당신의 용기에 장착되는 파일/폴더에 대한 자세한 선택하고 해당 마운트 :

      선택할 수있는 옵션은.

    • 호스트에서 npm 설치를 수행하십시오. 원하는 경우 컨테이너 실행 파일의 일부로 실행 파일을 저장할 수 있습니다.
    • 변경할 때마다 컨테이너를 다시 작성하십시오. 이상적은 아니지만 Dockerfile 명령을 다시 구성하여 가장 자주 변경되는 사항이 마지막에만 복사되므로 도커가 이전 계층을 캐시 할 수 있습니다.
    +0

    감사합니다. 귀하의 옵션 # 2를 고르지 만, 소스를 업데이트 할 때 문제가 발생하면 새로 고침 할 때 페이지에 반영되지 않습니다. 내가 놓친 게 있니? 나는 항상 컨테이너에 내 src를 마운트하기 위해 -v를 사용할 수 있다고 생각했다. +1 – FlyingCat

    +0

    JS 파일을 처리하는시기를 nodejs에 익숙하게 알 수는 없지만 시작시에만 기본적으로 사용됩니다. 저기 도움이 될 수있는 다양한 라이브 재 장전 유틸리티가 나타납니다. – BMitch

    관련 문제