保存时Docker Nodemon未启动

Posted

技术标签:

【中文标题】保存时Docker Nodemon未启动【英文标题】:Docker Nodemon not starting when saving 【发布时间】:2020-10-27 09:07:54 【问题描述】:

我在 Ubuntu 操作系统上开发了我的网站,但今天我已迁移到 Windows。在迁移到 Windows 之前 Nodemon 可以工作,但现在如果我点击保存它不会重新启动。

Dockerfile

FROM node:current-alpine3.11

RUN mkdir /mbs_welfare

WORKDIR /mbs_welfare

COPY package.json /mbs_welfare/

RUN npm install

COPY . /mbs_welfare

RUN npm install -g nodemon

EXPOSE 3000

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

docker-compose.yml

version: "3.8"
services: 
    web:
        build: .
        restart: always
        ports: 
            - 3000:3000
        volumes: 
            - .:/mbs_welfare

    mysql_db:
        image: mysql:latest
        command: --default-authentication-plugin=mysql_native_password
        environment:
            MYSQL_ROOT_PASSWORD: ****
        ports:
            - 3306:3306
        volumes:
            - mysql_db:/var/lib/mysql

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        ports:
            - 8000:80
        links:
            - mysql_db:db
        environment:
            MYSQL_USERNAME: root
            MYSQL_ROOT_PASSWORD: ****
            PMA_HOST: mysql_db

volumes:
    mysql_db:

package.json 我尝试“启动”的一些代码:“nodemon -L ./server.js”,但它不起作用


  "name": "welfare",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": 
    "dev": "nodemon ./server.js",
    "start": "nodemon ./server.js", 
    "test": "echo \"Error: no test specified\" && exit 1"

CMD

web_1 : [nodemon] 2.0.4
web_1 : [nodemon] to restart at any time, enter 'rs'
web_1 : [nodemon] watching path(s) *.*
web_1 : [nodemon] watching extensions: js,mjs,json
web_1 : [nodemon] starting 'node server.js'
web_1 : Server is running on port : 3000

【问题讨论】:

似乎直接安装主机节点并将其用于本地开发环境会更容易。您仍然可以在容器中运行 MySQL,并根据您运行的环境更改应用程序配置。 【参考方案1】:

nodemon 需要 inotify-tools 库来检测 linux 中的文件更改,这在 alpine 版本的 nodejs 容器上不存在。您可以在 dockerfile 中使用 apk add inotify-tools 安装它。 我记得旧版本的 Docker Desktop for Windows 没有检测到从主机绑定挂载的文件上的文件更改(换句话说,inotify-tools 文件系统监视不起作用)。如果您安装了 inotify-tools 并且它仍然没有检测到文件更改,这可能仍然是一个问题。 在这种情况下,您必须force nodemon to use polling。 最后,如果这些都不适合你,我建议在 Windows 上切换到WSL,这会让你很头疼(我猜WSL2 有原生 docker 支持,这很棒)

【讨论】:

以上是关于保存时Docker Nodemon未启动的主要内容,如果未能解决你的问题,请参考以下文章

未更改的文件正在触发 nodemon 重新启动

文件更改时,两个带有 Nodemon 的后端服务器不会在 docker 容器中重新加载

Nodemon 在 Windows Docker 环境中不重启

Nodemon:节点未运行

带有标志 --legacy-watch 的 Nodemon 不适用于 docker Ubuntu/Linux

使用 nodemon 启动 Loopback