在Docker上使用package.json中的npm脚本时,Nodemon无法正常工作

3

我正在使用NodeJS和Nodemon在Docker上工作。当我尝试直接在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

但是,当我尝试在其中使用 nodemon 命令时,再次使用 dev ,它无法工作。容器不会启动。我还尝试了以下方法,它也可以正常工作:

像这样(可运行):[docker-compose]

command: nodemon --exec npm start

我仍然不明白,为什么在脚本dev中执行nodemon命令没有生效。

我正在使用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"
  }
}
4个回答

2
只需在您的 package.json 中添加“.”即可定义路径,如下所示:
"scripts": {
    "start": "node ./source/index.js",
    "dev": "nodemon ./source/index.js"
  }

0

在运行nodemon时,您需要添加一个环境变量来指向npm。路径应该像这样:C:\........\npm,并选择一个名称。


我正在Docker中运行这个程序,那么我应该在哪里添加环境变量?是在Docker容器中吗? - ammar26

0

尝试这个解决方案:

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放在同一个工作目录下怎么办? - ammar26

0
just add in package.json--->>

"scripts": {
    "dev":"nodemon -L app.js"
  }

in docker file--->>>

FROM node:latest

WORKDIR /app

COPY ./package*.json ./

RUN npm install

RUN npm install -g nodemon

COPY . .

EXPOSE 5500

CMD ["npm", "run","dev"]

运行cmd---> docker build -t your_imge_name .
docker run --rm -d -p 5500:5500 -v %cd% --name your_container_name your_imge_name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接