Docker - /bin/sh: nodemon: not found

3

我有以下 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 yarn add global nodemon只会在容器错误中添加额外的warning ../package.json: No license field

我当前拥有以下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"
  }

你需要在容器上全局安装nodemon,或以某种方式使其在应用程序作用域中可用。 - Ahmad Ali
在运行 yarn dev 之前,先添加命令全局安装 nodemon。 - Ahmad Ali
你是如何启动容器的?(一些常见的Node/Docker设置似乎在运行时完全覆盖镜像内容,并使用一个卷来存储node_modules目录,这会导致Docker忽略package.json文件中的更改。) - David Maze
1个回答

3

请尝试以下方法:

#Dockerfile

FROM node:alpine

WORKDIR /backend

COPY package*.json .

RUN yarn

RUN yarn add global nodemon

COPY . .

EXPOSE 5000

CMD ["yarn", "dev"]

注意:生产环境中最好不要使用nodemon。像在 start 脚本中一样提供构建文件。在启动命令之前,您必须添加构建命令。

#Dockerfile

FROM node:alpine

WORKDIR /backend

COPY package*.json .

RUN yarn

COPY . .

RUN yarn run build

EXPOSE 5000

CMD ["yarn", "start"]

@Prajwol Adhikari,看看这个!! - Amila Senadheera
2
这个可行。但令人惊讶的是,在我删除了主机上的node_modules文件夹后,我的原始代码也能正常工作。 - Prajwol Adhikari
你知道为什么会发生这种情况吗?@PrajwolAdhikari - Federico Peralta

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