2014-12-01 21 views
5

NodeJS dev-env oluşturmak için Şekil ile Docker kullanıyorum.Nodemon Docker ortamında çalışmıyor

Sunucu.js'yi izlemek için nodemon kullanırken, sunucu.js'yi değiştirmek sunucuyu yeniden başlatmaz.

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

Ancak nodemon'dan denetleyiciye değişirken, o zaman işe yaradı!

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

Sorunun nerede olduğunu bilen var mı?

Daha verileri şöyledir:


Benim incir klasör yapısı:

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 web sitesinden örnek kod)

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/'); 

cevap

1

ilk varan - VOLUME ./app:/nodeapp istediğini yapmaz - Eğer /app:/nodeapp denilen görüntüde bir dizin oluştururken - hiçbir noktada ve bir server.js dosyası resminize dönüyor.

sizin Dockerfile değişen docker run --rm -it yourimagename ls -la

kullanarak test

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"] 

beni alır:

Sen sürümü 1.3 nodemon gerekir:

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

Cevabınız için teşekkür ederiz. Dockerfile'ımda bir hata var. Aslında, istediğim: Benim nodejs env Docker kapsayıcısında. Ana sistemdeki işletim sistemindeki proje klasöründeki kodumu değiştirirken, kap değiştirilen dosyayı algılayacak ve ardından otomatik olarak server.js dosyasını yeniden başlatacaktır. Sorunumu iyi tanımlamadığım benim hatam. Can Docker bunu yapabilir mi? – kerkerj

3

Bu benim böyle yaparız. Bunun için 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" 

uygulama/sunucu. 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/'); 

sonra npm run nodemon çalıştırmak başlamak için.