docker 未在主机上安装依赖项(node_modules)

fee*_*lay 2 javascript node.js docker reactjs docker-compose

当我运行时,docker-compose build我看到 package.json 的依赖项已安装在容器上,但没有安装在我的计算机上。因此,当我运行之后,docker-compose up我收到错误,提示找不到依赖项,即:Error: Cannot find module 'express'

我的应用程序结构非常简单,如下所示:

|____frontend
| |____index.html
| |____index.js
| |____webpack.config.js
| |____yarn.lock
| |____package.json
| |____dev.Dockerfile
|____backend
| |____server.js
| |____yarn.lock
| |____package.json
| |____dev.Dockerfile
|____docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

我的 docker-compose.yml:

version: "3.3"

services:

    frontend:
        build:
            context: .
            dockerfile: frontend/dev.Dockerfile
        volumes:
            - ./frontend:/frontend:cached
        command: yarn start

    backend:
        build:
            context: .
            dockerfile: backend/dev.Dockerfile
        volumes:
            - ./backend:/backend:cached
        command: yarn start
Run Code Online (Sandbox Code Playgroud)

这是前端的 Dockerfile(后端看起来相同):

FROM node:latest

WORKDIR "/frontend/"

COPY frontend/package.json frontend/package.json

COPY frontend/yarn.lock frontend/yarn.lock

RUN yarn
Run Code Online (Sandbox Code Playgroud)

这个配置有什么问题吗?我缺少什么?

小智 5

我遇到了类似的问题,并通过将匿名卷添加到我的 docker-compose 文件中的 node_modules 目录来解决它。因此 docker-compose 文件中的卷将如下所示:

volumes:
  - './frontend:/frontend:cached'
  - '/frontend/node_modules'
Run Code Online (Sandbox Code Playgroud)

我从这篇博客文章中得到了这个想法