Error: Cannot find module '/usr/src/app/nodemon' while using docker-compose
Error: Cannot find module '/usr/src/app/nodemon' while using docker-compose
我正在尝试创建一个 docker-compose.yml 以便能够 运行 我的 crud-admin 面板同时使用我的后端和前端 API与 docker 相同的网络。这是我第一次使用“docker-compose”文件通过 docker 进行部署。通常我使用普通的 Dockerfile 部署每个 API 本身。
当 运行 执行命令时:docker-compose up --build
我得到错误:
Error: Cannot find module '/usr/src/app/nodemon'
我有:
- 即使我的用户已添加到 docker 组
,也尝试使用 sudo
- 我的用户有 sudo 权限
- 我已尝试更新
在发布我的 Dockerfile 和 docker 撰写之前,这是我的文件夹结构:
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 尚未完成,我已经注释了前端部分中的所有行)
version: '3'
services:
#set up the frontend
#frontend:
# build:
# context: frontend
# dockerfile: Dockerfile
# image: frontend
# - $PWD:/usr/src/app
# - /usr/src/app/node_modules
# restart: always
# ports:
# - "3000:3000"
# networks:
# testnetwork
#set up the backend
backend:
build:
context: backend
dockerfile: Dockerfile
image: nodejs-restapi
#- $PWD:/usr/src/app
#- /usr/src/app/node_modules
restart: always
ports:
- "5000:5000"
networks:
testnetwork:
# Set up shared network
networks:
testnetwork:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.0.0.0/8
如果需要,这是我的 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
是一种开发工具,我认为 运行 它在您部署到的 production/any 其他环境中没有多大用处。
只需将后端 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"]
好的,感谢查理,解决方案是在 Dockerfile 中添加了“运行 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"]
我正在尝试创建一个 docker-compose.yml 以便能够 运行 我的 crud-admin 面板同时使用我的后端和前端 API与 docker 相同的网络。这是我第一次使用“docker-compose”文件通过 docker 进行部署。通常我使用普通的 Dockerfile 部署每个 API 本身。
当 运行 执行命令时:docker-compose up --build
我得到错误:
Error: Cannot find module '/usr/src/app/nodemon'
我有:
- 即使我的用户已添加到 docker 组 ,也尝试使用 sudo
- 我的用户有 sudo 权限
- 我已尝试更新
在发布我的 Dockerfile 和 docker 撰写之前,这是我的文件夹结构:
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 尚未完成,我已经注释了前端部分中的所有行)
version: '3'
services:
#set up the frontend
#frontend:
# build:
# context: frontend
# dockerfile: Dockerfile
# image: frontend
# - $PWD:/usr/src/app
# - /usr/src/app/node_modules
# restart: always
# ports:
# - "3000:3000"
# networks:
# testnetwork
#set up the backend
backend:
build:
context: backend
dockerfile: Dockerfile
image: nodejs-restapi
#- $PWD:/usr/src/app
#- /usr/src/app/node_modules
restart: always
ports:
- "5000:5000"
networks:
testnetwork:
# Set up shared network
networks:
testnetwork:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.0.0.0/8
如果需要,这是我的 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
是一种开发工具,我认为 运行 它在您部署到的 production/any 其他环境中没有多大用处。
只需将后端 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"]
好的,感谢查理,解决方案是在 Dockerfile 中添加了“运行 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"]