【问题标题】:Cannot find a module after run npm install (Docker)运行 npm install (Docker) 后找不到模块
【发布时间】: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


【解决方案1】:

删除 package-lock.json 和 node_modules

然后你可以运行 npm install

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2016-02-25
    • 2022-10-23
    • 1970-01-01
    • 2021-12-06
    相关资源
    最近更新 更多