【问题标题】:node_modules missing even after npm install in docker container即使在 docker 容器中安装 npm 后,node_modules 也会丢失
【发布时间】:2019-04-05 17:59:16
【问题描述】:

正在使用的 Dockerfile:

FROM node:8-alpine

WORKDIR /usr/src/app
COPY . .
RUN npm install

CMD ["npm", "run", "serve"]

EXPOSE 8080

还有 docker-compose.yml 文件:

version: '3'

services:
    app:
        container_name: app
        restart: always
        build:
            context: ./app
            dockerfile: Dockerfile
        ports:
            - "8080:8080"
        volumes:
            - ./app:/usr/src/app
            - ./logs:/logs

文件夹结构如下:

project/
|-- docker-compose.yml
|-- logs/
|-- app/
    |-- Dockerfile
    |-- package.json

从 project/ 运行 docker-compose up --build 时,npm install 步骤在大约一分钟后输出以下内容:

added 1684 packages from 1297 contributors and audited 36429 packages in 56.23s
found 0 vulnerabilities

然而,在npm run serve 步骤,输出基本上是说找不到 npm 模块,除此之外,还有这一行:

npm WARN 本地 package.json 存在,但缺少 node_modules,你的意思是要安装吗?

怎么npm install居然真的被执行了,但是npm却抱怨找不到node_modules

【问题讨论】:

    标签: docker npm-install


    【解决方案1】:

    我遇到了同样的问题,我在this instruction 之后解决了它。在volumes中的docker-compose.yml文件中添加一行代码- /usr/src/app/node_modules

    volumes:
      - ${PWD-.}/name_of_your_app:/usr/src/app
      - /usr/src/app/node_modules
    

    【讨论】:

      【解决方案2】:

      更新:我最后只使用 ./app/src 文件夹作为卷,而不是 ./app

      这样,/app/node_modules 不会被主机的音量覆盖。

      version: '3'
      
      services:
          app:
              container_name: app
              restart: always
              build:
                  context: ./app
                  dockerfile: Dockerfile-dev
              ports:
                  - "8080:8080"
              volumes:
                  - ./app/src:/usr/src/app/src # <---- this
                  - ./logs:/logs
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 2015-03-15
        • 1970-01-01
        • 2021-07-23
        相关资源
        最近更新 更多