2014-11-09 2 views
5

최소 노드 앱으로 fig up을 실행하려고합니다.픽업 : 모듈을 찾을 수 없습니다 - 도커 실행 작업

(편집은 : fig.yml 제거 체적)

fig.yml :

example: 
    build: . 
    command: node server.js 
    ports: 
    - "4000:4000" 
    links: 
    - postgres 
postgres: 
    image: postgres 

Dockerfile :

FROM node 

ADD . /src 
WORKDIR /src 
RUN npm install 

server.coffee :

express = require 'express' 
app = express() 

app.get "/", (req, res) -> 
    res.send "Hello World" 

server = app.listen 4000,() -> 
    console.log 'Listening on port %d', server.address().port 

fig build 발하다 예상대로.

$ docker run -it dockerexample_example /bin/bash 
[email protected]:/# node /src/server.js 
Listening on port 4000 

또는

$ docker run -it dockerexample_example 
Listening on port 4000 

:

example_1 | module.js:340 
example_1 |  throw err; 
example_1 |   ^
example_1 | Error: Cannot find module '/src/server.js' 
example_1 |  at Function.Module._resolveFilename (module.js:338:15) 
example_1 |  at Function.Module._load (module.js:280:25) 
example_1 |  at Function.Module.runMain (module.js:497:10) 
example_1 |  at startup (node.js:119:16) 
example_1 |  at node.js:906:3 

내가 이해할 수없는 것은 내가 무화과없이 (즉, 무화과 내장) 컨테이너에 서버를 실행할 수 있습니다 : fig up은 실패 또는

$ docker run -it -p 4000:4000 dockerexample_example 
Listening on port 4000 

무화과에서이 컨테이너를 실행하는 방법과 다른 점은 무엇입니까?

이 파일은 여기에 사용할 수 있습니다 https://github.com/skyl/docker-example

답변

4

차이가 volumes입니다. docker run 예제에서는 볼륨을 지정하지 않지만 fig.yml에는 컨테이너에 현재 작업 디렉토리가 /src으로 마운트되어 있으므로 빌드 중에 추가 된 /src이 볼륨에 의해 마스크되어 node_modules를 사용할 수 없습니다.

fig.yml에서 volumes을 제거하면 좋겠다고 생각합니다. 그렇지 않으면 컨테이너 외부에서 npm 설치를 실행해야합니다.

+0

불량 이미지를 강제로'docker rmi '해야만했습니다. –

+0

'fig rm'도 사용할 수 있습니다. –

+0

'fig up'은 현재 볼륨 정의 https://github.com/docker/fig/issues/447의 변경 사항에 문제가 있습니다. –

관련 문제