【发布时间】:2020-11-24 17:22:02
【问题描述】:
我正在尝试 dockerize 一个节点应用程序,但由于某种原因,当我使用以下方式启动应用程序时:
docker-compose -f docker-compose -f docker-compose.override.yml
我收到一个错误 ** 错误:找不到模块 'connect-flash' *** 但该模块是在 package.json 中定义的。
显然,npm install 只安装了有限数量的模块
有什么建议吗?
谢谢!
我的文件:
Dockerfile.dev
FROM node:14
RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
ENV HOME=/home/node/
USER node
WORKDIR $HOME/app
COPY package*.json ./
RUN npm install
COPY --chown=node:node . .
EXPOSE 3000
CMD [ "node", "index.js" ]
package.json
{
"name": "test-app",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node index.js"
},
"dependencies": {
"body-parser": "^1.19.0",
"connect-flash": "^0.1.1",
"connect-mongo": "^3.2.0",
"cookie-parser": "^1.4.5",
"crypto": "^1.0.1",
"csurf": "^1.11.0",
"express": "^4.17.1",
"express-session": "^1.17.1",
"express-validator": "^6.7.0",
"handlebars": "^4.7.6",
"helmet": "^4.2.0",
"lodash": "^4.17.20",
"mathjs": "^8.0.1",
"method-override": "^3.0.0",
"mongoose": "^5.10.15",
"mongoose-float": "^1.0.4",
"mongoose-paginate-v2": "^1.3.11",
"multer": "^1.4.2",
"node-fetch": "^2.6.1",
"passport": "^0.4.1",
"passport-local": "^1.0.0",
"path": "^0.12.7",
"pug": "^3.0.0",
"serve-static": "^1.14.1",
"nodemon": "^2.0.6"
},
"devDependencies": {
"snyk": "^1.431.1",
"nodemon": "^2.0.6"
}
}
docker-compose.yml
version: '3.7'
services:
nodejs_coin_container:
image: nodejs
container_name: coin_nodejs
restart: unless-stopped
networks:
- coin-network
mongodb_coin_container:
image: mongo:latest
container_name: coin_db
restart: unless-stopped
networks:
- coin-network
webserver_coin:
image: nginx:mainline-alpine
container_name: webserver_coin
restart: unless-stopped
depends_on:
- nodejs_coin_container
networks:
- coin-network
certbot_coin:
image: certbot/certbot
container_name: certbot_coin
depends_on:
- webserver_coin
networks:
coin-network:
driver: bridge
docker-compose-override.yml
version: '3.7'
services:
nodejs_coin_container:
build:
context: .
dockerfile: Dockerfile.dev
environment:
MONGO_USERNAME: "${MONGO_USERNAME}"
MONGO_PASSWORD: "${MONGO_PASSWORD}"
MONGO_HOSTNAME: mongodb_coin_container
MONGO_PORT: "${MONGO_PORT}"
MONGO_DB: "${MONGO_DB}"
volumes:
- .:/home/node/app
- node_modules_coin:/home/node/app/node_modules
command: node index.js --NODE_ENV=development
webserver_coin:
ports:
- "80:80"
volumes:
- web_root_coin:/var/www/html
- ./nginx-conf:/etc/nginx/conf.d
depends_on:
- nodejs_coin_container
networks:
- coin-network
mongodb_coin_container:
environment:
MONGO_INITDB_ROOT_USERNAME: "${MONGO_USERNAME}"
MONGO_INITDB_ROOT_PASSWORD: "${MONGO_PASSWORD}"
volumes:
- mongodb_coin_data_container:/data/db
volumes:
mongodb_coin_data_container:
node_modules_coin:
web_root_coin:
【问题讨论】:
-
将 node_modules 添加到您的 .dockerignore 文件中;复制项目文件时可能会被覆盖。
-
volumes:告诉 Docker 使用node_modules_coin命名卷中node_modules树的旧副本优先于映像中的更新副本。我建议完全删除这个volumes:块以使用图像中内置的代码。 -
@AbdullahS.Al-Hallak 我忘了,如果我在 .dockerignore 中添加了 node_modules
标签: node.js docker docker-compose