Node.js 错误:找不到模块'/usr/src/app/nodemon';在使用docker compose时

Node.js 错误:找不到模块'/usr/src/app/nodemon';在使用docker compose时,node.js,docker,docker-compose,nodemon,Node.js,Docker,Docker Compose,Nodemon,我正在尝试创建docker-compose.yml,以便能够在与docker相同的网络中同时使用后端和前端API运行我的crud管理面板。这是我第一次使用“docker compose”文件与docker一起部署。通常,我使用普通Dockerfile部署每个API本身 FROM node:13-alpine COPY . /usr/src/app WORKDIR /usr/src/app RUN npm install RUN npm install -g nodemon EXPOSE 5

我正在尝试创建docker-compose.yml,以便能够在与docker相同的网络中同时使用后端和前端API运行我的crud管理面板。这是我第一次使用“docker compose”文件与docker一起部署。通常,我使用普通Dockerfile部署每个API本身

FROM node:13-alpine

COPY . /usr/src/app
WORKDIR /usr/src/app

RUN npm install
RUN npm install -g nodemon

EXPOSE 5000
CMD [ "nodemon", "server.js"]
运行命令时:
docker compose up--build
我得到错误:

Error: Cannot find module '/usr/src/app/nodemon'
我有:

  • 即使我的用户已添加到docker组,也尝试使用sudo
  • 我的用户具有sudo权限
  • 我已尝试更新
在发布我的Dockerfile和docker compose之前,以下是我的文件夹结构:

the-admin-panel
│
├──frontend(reactjs/nextjs)
│  ├─ .next
│  ├─ components
│  ├─ content
│  ├─ helper
│  ├─ pages
│  ├─ public
│  ├─ services
│  ├─ static
│  ├─ next.config
│  ├─ next-env.d
│  ├─ package.json
│  ├─ package-lock.json
│  ├─ tsconfig.json
│  ├─ Dockerfile
│  ├─ .dockerignore
│  
│
├──backend(nodejs)
│  ├─ api
│  ├─ startup
│  ├─ middleware
│  ├─ models
│  ├─ server.js
│  ├─ package.json
│  ├─ package-lock.json
│  ├─ .env
│  ├─ Dockerfile
│  ├─ .dockerignore
│  
├──docker-compose.yml
目前,前端还没有完成,所以现在我只尝试部署后端,所以我现在专注于这一部分

以下是我的后端的Dockerfile:

FROM node:13-alpine

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 5000
CMD [ "nodemon", "server.js"]
正如你所看到的,我试图用“nodemon”来运行它

最后,这里是我的docker-compose.yml文件(注意,由于前端api尚未完成,我已经对前端部分中的所有行进行了注释)

如果需要,这里是我的package.json文件:

{
  "name": "..",
  "version": "1.0.0",
  "description": "..",
  "main": "server.js",
  "scripts": {
    "start": "nodemon server.js"
  },
  "author": "tim",
  "license": "ISC",
  "dependencies": {
    "bcrypt": "^5.0.1",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "fastest-validator": "^1.10.0",
    "helmet": "^4.4.1",
    "jsonwebtoken": "^8.5.1",
    "lodash": "^4.17.21",
    "mysql": "^2.18.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.7"
  }
}

有人能帮我解决这个nodemon问题吗?

我建议不要在docker图像中使用
nodemon
nodemon
是一种开发工具,我认为在您部署到的生产/任何其他环境中运行它没有多大用处

只需将后端的
Dockerfile
中的最后一行更改为
CMD[“node”,“server.js”]

我相信这只是一次尝试。因此,如果没有太多的生产级别调整,我建议您尝试更改dockerfile

FROM node:13-alpine

COPY . /usr/src/app
WORKDIR /usr/src/app

RUN npm install
RUN npm install -g nodemon

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

好的,多亏了Charlie,解决方案是Dockerfile中添加了“RUN npm install-g nodemon”的一个小改动

FROM node:13-alpine

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm install -g nodemon  #this was needed in order to make it work

EXPOSE 5000

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

包括你的包。现在包括它。试着运行
CMD[“/node\u modules/.bin/nodemon”,“server.js”]
我实际上使用的是你建议的CMD。但是其他人告诉我,为了能够使用nodemon,我需要将“nodemon”更改为“nodemon”。我可能需要使用nodemon,以便在上载新文件时能够自动重新加载docker容器。您正在上载哪些类型的文件到您的容器?如果您要发布后端的新版本,您应该运行一个新的容器,而不是更新当前容器中的文件,这就是容器的要点。它们注定是短暂的。如果是其他原因,我不明白为什么服务器必须重新启动,作为对文件上传的反应。请详细说明。目前它是供开发人员使用的开发工具。这就是为什么。为什么要使用docker容器来运行正在开发的服务器?我不清楚,但我很确定你可以不使用图像中的
nodemon
。我尝试过,错误仍然是一样的:backend|1 | internal/modules/cjs/loader.js:965 backend|1 | throw err;backend|1|错误:在Function.module.处找不到module'/usr/src/app/nodemon'backend|1|解析文件名(internal/modules/cjs/loader.js:962:15)在Function.modules.处找不到backend|1|加载(internal/modules/cjs/loader.js:838:27)后端|在Function.executeUserPoint[as runMain](internal/modules/run|.js:71:12)backend|1 |在internal/main/run|u main|u module.js:17:47{backend|1 |代码:'module|u NOT|u FOUND',backend|1 | requireStack:[]执行此操作时是否会出现相同的错误:
CMD node[“server.js”
no,当使用“node”时相反,它工作得很好。尝试在EXPOSE命令
运行npm install-g nodemon
之前添加这个命令,它似乎可以工作!!但是这个命令行应该仍然是这样的:Cmd[“node”,“server.js”]还是我应该尝试将它改为:Cmd[“nodemon”,“server.js”]?编辑:我已经测试过了,它也可以使用“nodemon”不要在CMD中使用“node”!谢谢!!