Nodemon在Docker环境中不起作用
我正在用无花果来构buildNodeJS dev-env。
当我使用nodemon来监视server.js时,更改server.js将不会重新启动服务器。
CMD ["nodemon", "/nodeapp/server.js"]
但是,当我从节点更改为主pipe,然后它的工作!
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/');
首先 – VOLUME ./app:/nodeapp
没有做你想做的 – 你在映像中创build一个名为/app:/nodeapp
的目录,所以server.js文件在任何时候都不会进入你的映像。
使用docker run --rm -it yourimagename ls -la
testingdocker run --rm -it yourimagename ls -la
改变你的Dockerfile
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"]
让我:
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/
这是我如何做到的:
你需要nodemon 1.3.0-5版本( npm i -g nodemon@dev
)
.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"
应用程序/ 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/');
然后我运行npm run nodemon
开始。