【问题标题】:Nodemon is not working in Docker environmentNodemon 在 Docker 环境中不工作
【发布时间】:2015-01-29 08:32:18
【问题描述】:

我正在使用 Docker 和 fig 来构建 NodeJS dev-env。

虽然我使用 nodemon 监视 server.js,但更改 server.js 不会重新启动服务器。

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

但是当我从 nodemon 更改为 supervisor 时,它起作用了!

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

【问题讨论】:

    标签: node.js docker nodemon fig node-supervisor


    【解决方案1】:

    有一个特殊的选项可以启用 nodemon 的 legacy 监视模式:

    nodemon --legacy-watch
    

    【讨论】:

    【解决方案2】:

    这就是我的做法:

    为此,您需要 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"
    

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

    然后我运行npm run nodemon 开始。

    【讨论】:

      【解决方案3】:

      首先 - VOLUME ./app:/nodeapp 没有做你想做的事 - 你正在图像中创建一个名为 /app:/nodeapp 的目录 - 所以 server.js 文件绝不会进入你的图像。

      使用docker 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/
      

      【讨论】:

      • 感谢您的回复。我的 Dockerfile 中有一个错误。实际上,我想要的是:我的 nodejs env 在 Docker 容器中。当我在主机操作系统的项目文件夹中更改代码时,容器将检测到更改的文件,然后自动重新启动 server.js。我没有很好地描述我的问题是我的错误。 Docker 能做到吗?
      猜你喜欢
      • 2017-01-07
      • 2021-01-10
      • 2022-01-18
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多