即使在 docker 容器中安装 npm 之后 node_modules 也丢失

Jiv*_*van 9 docker npm-install

正在使用的 Dockerfile:

FROM node:8-alpine

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

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

EXPOSE 8080
Run Code Online (Sandbox Code Playgroud)

以及 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
Run Code Online (Sandbox Code Playgroud)

文件夹结构如下:

project/
|-- docker-compose.yml
|-- logs/
|-- app/
    |-- Dockerfile
    |-- package.json
Run Code Online (Sandbox Code Playgroud)

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

added 1684 packages from 1297 contributors and audited 36429 packages in 56.23s
found 0 vulnerabilities
Run Code Online (Sandbox Code Playgroud)

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

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

怎么来npm install的确实确实执行了,但是 npm 抱怨node_modules找不到?

Jiv*_*van 5

更新:我最终只使用./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
Run Code Online (Sandbox Code Playgroud)


Rom*_*ych 5

我遇到了同样的问题,我只是按照此说明解决了它。- /usr/src/app/node_modules在卷中的 docker-compose.yml 文件中添加一行代码:

volumes:
  - ${PWD-.}/name_of_your_app:/usr/src/app
  - /usr/src/app/node_modules
Run Code Online (Sandbox Code Playgroud)