2014-12-01 6 views
5

저는 NodeJS dev-env를 빌드하기 위해 그림과 함께 Docker를 사용하고 있습니다.Nodemon이 Docker 환경에서 작동하지 않습니다.

nodemon을 사용하여 server.js를 보는 동안 server.js를 변경해도 서버가 다시 시작되지 않습니다.

CMD ["nodemon", "/nodeapp/server.js"] 

하지만 노르 드몬에서 관리자로 바뀌었지만 효과가있었습니다.

CMD ["supervisor", "/nodeapp/server.js"] 

어디에서 문제가 발생했는지 아는 사람이 있습니까?

더 많은 정보는 다음과 같다


내 그림 폴더 구조 :

app/server.js 
    package.json 
    node_modules/ 
fig.yml 
Dockerfile 

fig.yml :

nodejs: 
    build: . 
    ports: 
    - "8080:8080" 

Dockerfile :

RUN apt-get update --fix-missing 
RUN rm /bin/sh && ln -s /bin/bash /bin/sh 

# NVM 
RUN curl -sL https://deb.nodesource.com/setup | sudo bash - && \ 
    apt-get install -y nodejs 

VOLUME ./app:/nodeapp 
WORKDIR /nodeapp 

RUN rm /bin/sh && ln -s /bin/bash /bin/sh && \ 
    npm install -g nodemon mocha supervisor 
CMD ["nodemon", "/nodeapp/server.js"] 

Server.js : (NodeJS 웹 사이트에서 샘플 코드)

var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello 12\n'); 
}).listen(8080); 

console.log('Server running at http://127.0.0.1:8080/'); 

답변

1

이 먼저 - VOLUME ./app:/nodeapp 당신이 원하는 것을하지 않는다 - 당신이 /app:/nodeapp라는 이미지의 디렉토리를 만들 - 그래서 아무 시점에서하고하는 것은입니다 server.js 파일이 이미지에 표시됩니다.

당신의 Dockerfile을 변경 docker run --rm -it yourimagename ls -la

를 사용하여 테스트

FROM ubuntu 

RUN apt-get update --fix-missing 
RUN apt-get install -yq curl 
RUN rm /bin/sh && ln -s /bin/bash /bin/sh 

# NVM 
RUN curl -sL https://deb.nodesource.com/setup | sudo bash - && \ 
    apt-get install -y nodejs 

#VOLUME ./app:/nodeapp 
ADD  app /nodeapp 
WORKDIR /nodeapp 

RUN rm /bin/sh && ln -s /bin/bash /bin/sh && \ 
    npm install -g nodemon mocha supervisor 
CMD ["nodemon", "/nodeapp/server.js"] 

에 나를을 가져옵니다

당신은 버전 1.3 nodemon해야합니다

mini:nodaemon sven$ docker run --rm -it -p 8080:8080 nodaemon  
2 Dec 02:27:52 - [nodemon] v1.2.1 
2 Dec 02:27:52 - [nodemon] to restart at any time, enter `rs` 
2 Dec 02:27:52 - [nodemon] watching: *.* 
2 Dec 02:27:52 - [nodemon] starting `node /nodeapp/server.js` 
Server running at http://127.0.0.1:8080/ 
+0

답장을 보내 주셔서 감사합니다. Dockerfile에 실수가 있습니다. 사실, 원하는 것은 다음과 같습니다. 내 nodejs env가 Docker 컨테이너에 있습니다. 호스트 OS의 프로젝트 폴더에서 코드를 변경하는 동안 컨테이너가 변경된 파일을 감지하고 자동으로 server.js를 다시 시작합니다. 내 실수는 내 문제를 잘 설명하지 않았다. Docker가 그렇게 할 수 있습니까? – kerkerj

3

이 내가 그것을 할 방법이다. 0-5 (npm i -g [email protected])

,

.dockerignore :

node_modules/* 

Dockerfile :

FROM node:0.10 

WORKDIR /nodeapp 
ADD ./package.json /nodeapp/package.json 
RUN npm install --production 

ADD ./app /nodeapp/app 

EXPOSE 8080 

CMD ["node", ".", "--production"] 

package.json :

{ 
    "name": "fig-nodemon", 
    "version": "1.0.0", 
    "description": "", 
    "main": "./app/server.js", 
    "scripts": { 
    "nodemon": "fig up -d && fig run nodejs npm i --development && nodemon -x \"fig kill nodejs && fig build nodejs && fig start nodejs && fig logs nodejs\"" 
    }, 
    "author": "", 
    "license": "MIT" 
} 

fig.yml :

nodejs: 
    build: . 
    command: node . --development 
    volumes: 
    - ./app:/nodeapp/app 
    ports: 
    - "8080:8080" 

응용 프로그램/서버. JS :

var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello 13\n'); 
}).listen(8080); 

console.log('Server running at http://127.0.0.1:8080/'); 

다음 내가 npm run nodemon을 실행 시작하세요.

관련 문제