Node.js Docker-/bin/sh:nodemon:未找到

Node.js Docker-/bin/sh:nodemon:未找到,node.js,docker,dockerfile,nodemon,Node.js,Docker,Dockerfile,Nodemon,我有以下docker文件 #Dockerfile FROM node:alpine WORKDIR /backend COPY package*.json . RUN yarn COPY . . EXPOSE 5000 CMD ["yarn", "dev"] Nodemon在主机上按预期工作,但在运行容器时显示以下错误消息 yarn run v1.22.5 $ nodemon /bin/sh: nodemon: not found erro

我有以下docker文件

#Dockerfile

FROM node:alpine

WORKDIR /backend

COPY package*.json .

RUN yarn

COPY . .

EXPOSE 5000

CMD ["yarn", "dev"]
Nodemon在主机上按预期工作,但在运行容器时显示以下错误消息

yarn run v1.22.5
$ nodemon
/bin/sh: nodemon: not found
error Command failed with exit code 127.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
主机中未全局安装Nodemon。在Dockerfile上添加
RUN-warn add-global-nodemon
,只会在容器错误中添加一个额外的
警告../package.json:No-license字段

我目前拥有以下package.json文件,其中包含以下开发人员依赖项

# package.json
...
"scripts": {
    "build": "tsc -p .",
    "start": "node ./dist/src/index.js",
    "dev": "nodemon",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "devDependencies": {
    "@types/express": "^4.17.11",
    "@types/node": "^14.14.34",
    "nodemon": "^2.0.7",
    "ts-node": "^9.1.1",
    "typescript": "^4.2.3"
  },
...
而nodemon.json作为

{
    "watch": [
      "src"
    ],
    "ext": "ts,json",
    "ignore": [
        "src/**/*.spec.ts"
    ],
    "exec": "yarn ts-node src/index.ts"
  }
试试下面的

#Dockerfile

FROM node:alpine

WORKDIR /backend

COPY package*.json .

RUN yarn

RUN yarn add global nodemon

COPY . .

EXPOSE 5000

CMD ["yarn", "dev"]

旁注:最好不要在生产中使用
nodemon
。在
start
脚本中提供构建文件。您必须在开始之前添加build命令

#Dockerfile

FROM node:alpine

WORKDIR /backend

COPY package*.json .

RUN yarn

COPY . .

RUN yarn run build

EXPOSE 5000

CMD ["yarn", "start"]

你需要在容器上全局安装nodemon,或者通过某种方式使应用程序范围可用。在开发之前,添加命令以安装nodemon globallyHow你实际上是如何启动容器的?(一些常见的节点/Docker设置在运行时似乎完全覆盖了图像内容,而且它们使用了一个卷作为
Node_modules
树,这会导致Docker忽略
package.json
文件中的更改。)@Prajwol Adhikari,检查一下!!这起作用了。但令人惊讶的是,在我删除了主机中的node_modules文件夹后,我的原始代码也能正常工作。