Node.js 错误:找不到模块'/usr/src/app/nodemon';在使用docker compose时
我正在尝试创建docker-compose.yml,以便能够在与docker相同的网络中同时使用后端和前端API运行我的crud管理面板。这是我第一次使用“docker compose”文件与docker一起部署。通常,我使用普通Dockerfile部署每个API本身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
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权限
- 我已尝试更新
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”!谢谢!!