【发布时间】:2020-06-09 01:49:38
【问题描述】:
在我不得不向 node.js 应用程序添加一个新的 npm 包之前,我的这个 docker 镜像运行良好,之后,新添加的模块“未找到”。我想也许这个包不好,所以我尝试了另一个相同的结果(未找到)。这些是我的文件:
docker-compose.yml
version: '3.8'
services:
builditjobs:
container_name: 'BIJ-API'
build: .
ports:
- '12100:12100'
depends_on:
- db
volumes:
- './api:/var/apps/BIJ' # Mount the local directory to the image so we don't have to restart our image to get new code
- node_modules:/var/apps/BIJ/node_modules
db:
container_name: 'DB'
image: mysql:5.7
ports:
- '3306:3306'
volumes:
- db-data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=*******
- MYSQL_DATABASE=bij
- MYSQL_USER=bij
- MYSQL_PASSWORD=******
admin:
container_name: 'ADMINER'
image: adminer
depends_on:
- db
ports:
- '8080:8080'
volumes:
db-data:
node_modules:
Dockerfile
FROM node:10
RUN mkdir -p /var/apps/BIJ
WORKDIR /var/apps/BIJ
RUN apt-get update && apt-get install wait-for-it
RUN npm i npm@latest -g
RUN node -v
RUN npm -v
RUN npm install pm2 -g
RUN pm2 ls
COPY package.json ./
RUN npm install --no-optional && npm cache clean -f
RUN chown -R node:node /var/apps/BIJ
RUN ls -la
EXPOSE 12100
ENTRYPOINT ./docker-entrypoint.sh
码头入口点:
#!/bin/bash
wait-for-it db:3306 -- pm2 start ecosystem.config.js && pm2 logs API-1.0.0 --raw
package.json
{
"name": "bij-api",
"version": "1.0.0",
"description": "BIJ API",
"main": "server.ts",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"author": "CD",
"license": "ISC",
"dependencies": {
"@setreflex/logger": "^1.0.10",
"@types/node": "^14.0.11",
"body-parser": "^1.19.0",
"colors": "^1.4.0",
"compression": "^1.7.4",
"cors": "^2.8.5",
"crypto-js": "^4.0.0",
"express": "^4.17.1",
"jsonwebtoken": "^8.5.1",
"mariadb": "^2.4.0",
"moment": "^2.25.3",
"morgan": "^1.10.0",
"nodemailer": "^6.4.6",
"q": "^1.5.1",
"schema-inspector": "^1.6.9"
}
}
知道有什么问题吗?我强调:它工作得非常好,直到我做了一个
npm i crypto-js -s
并重建图像。谢谢!
LE:这是我得到的确切错误:
internal/modules/cjs/loader.js:638
BIJ-API | throw err;
BIJ-API | ^
BIJ-API |
BIJ-API | Error: Cannot find module 'crypto-js'
BIJ-API | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
BIJ-API | at Function.Module._load (internal/modules/cjs/loader.js:562:25)
BIJ-API | at Module.require (internal/modules/cjs/loader.js:692:17)
BIJ-API | at require (internal/modules/cjs/helpers.js:25:18)
【问题讨论】:
-
由于
node_modules卷包含潜在的有价值的用户数据,Docker 永远不会更新它。如果您完全删除volumes:块,您将运行实际内置到映像中的代码。 -
@DavidMaze 感谢您的评论。它确实为我指出了一个可行的解决方案:我删除了这些卷并在重建时它可以工作。为这个点赞!问题:有没有办法更新卷内的 node_modules 而不实际删除/重建它?
-
这有什么更新吗?
标签: node.js docker npm docker-compose