Nodemon 无法在 Docker 上使用 package.json 中的 npm 脚本

Posted

技术标签:

【中文标题】Nodemon 无法在 Docker 上使用 package.json 中的 npm 脚本【英文标题】:Nodemon not working using npm script from package.json on Docker 【发布时间】:2020-02-22 12:34:31 【问题描述】:

我在 Docker 上使用 NodeJS 和 Nodemon。当我尝试直接在 docker compose 文件中使用 nodemon 命令运行我的 NodeJS 应用程序时,它会运行。

像这样(工作):[docker-compose]

command: nodemon source/index.js

但是当我使用 package.json 中的脚本时,它不起作用

像这样(不工作):[docker-compose]

command: npm run dev

我的 package.json 文件在哪里

"scripts": 
    "start": "node source/index.js",
    "dev": "nodemon source/index.js"
  

我尝试了不同的方法,当我在没有 nodemon 的情况下简单地运行启动脚本时,它可以工作

像这样(工作):[docker-compose]

command: npm run start

但是当我尝试再次使用 dev 并在其中使用 nodemon 命令时,它不起作用。容器不会启动。我也尝试了以下方法,它也有效

像这样(工作):[docker-compose]

command: nodemon --exec npm start

我还是不明白,为什么 nodemon 命令在脚本 dev

中不起作用

我在 Swarm 模式下使用 Docker

这是我的两个文件

docker-compose

version: '3.7'

services:

    node-service:

        image: node-img:1.0

        ports:
        - 4000:4000

        working_dir: "/node-dir"

        volumes:
        - ./node-dir/source:/node-dir/source

        networks:
            - ness-net

        command: npm run dev

networks:

    ness-net:

package.json


  "name": "node-pkg",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": 
    "start": "node source/index.js",
    "dev": "nodemon source/index.js"
  ,
  "author": "",
  "license": "ISC",
  "dependencies": 
    "express": "^4.17.1"
  ,
  "devDependencies": 
    "nodemon": "^1.19.4"
  

【问题讨论】:

【参考方案1】:

只需添加“。”像这样在你的 package.json 中定义路径

"scripts": 
    "start": "node ./source/index.js",
    "dev": "nodemon ./source/index.js"
  

【讨论】:

【参考方案2】:

试试这个解决方案:

services:
 node-app:
  container_name: node-app
  image: node:latest
  restart: always
  volumes:
    - ./node/source:home/node/source
  working_dir: /home/node/source
  ports:
   - 4000:4000
  networks:
   - main-network
  command: "tail -f /dev/null && npm start"
  depends_on:
   - db
  logging:
    driver: "json-file"
    options:
     max-file: "4"
     max-size: "100m

这里是 package.json

"main": "index.js",
"scripts": 
  "preinstall": "npm i nodemon -g",
  "start": "nodemon index.js",

请确保工作目录中应该有 index.js 和 package.json。

【讨论】:

如果我不想将 index.js 和 package.json 放在同一个工作目录下怎么办?【参考方案3】:

运行nodemon时需要添加一个环境变量指向npm C:\........\npm路径应该是这样的,取个名字

【讨论】:

我在 docker 中运行它,那么我应该在哪里添加环境变量?在 Docker 容器中?

以上是关于Nodemon 无法在 Docker 上使用 package.json 中的 npm 脚本的主要内容,如果未能解决你的问题,请参考以下文章

无法在 docker 中调试 nodejs 应用程序

Docker - /bin/sh: nodemon: 未找到

docker容器内的Nodemon

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

保存时Docker Nodemon未启动

如何调试应用程序并使用 nodemon 测试手表