2014-12-01 12 views
5

Sto usando Docker con fig per compilare NodeJS dev-env.Nodemon non funziona nell'ambiente Docker

Mentre utilizzo nodemon per guardare server.js, la modifica di server.js non riavvierà il server.

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

Ma mentre sono passato da nodemon a supervisore, ha funzionato!

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

Qualcuno sa dove si trova il problema?

Maggiori informazioni sono al di sotto:


mia struttura di cartelle fig:

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: (codice di esempio dal sito 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/'); 

risposta

1

primo up - VOLUME ./app:/nodeapp non fa quello che si vuole - si sta creando una directory nell'immagine chiamato /app:/nodeapp - e così in nessun punto è il il file server.js sta entrando nell'immagine.

test utilizzando docker run --rm -it yourimagename ls -la

cambiare la Dockerfile a

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

mi fa:

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

Grazie per la risposta. C'è un errore nel mio Dockerfile. In realtà, quello che voglio è: My nodejs env è nel contenitore Docker. Mentre cambio il mio codice nella cartella del progetto sul mio sistema operativo host, il contenitore rileva il file modificato e quindi riavvia automaticamente il server.js. È un mio errore che non ho descritto bene il mio problema. Can Docker può farlo? – kerkerj

3

Questo è come lo faccio:

Sarà necessario nodemon versione 1.3. 0-5 per questo (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" 

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

quindi eseguire npm run nodemon per iniziare.

Problemi correlati