错误:在 docker 容器上找不到模块 @rollup/rollup-linux-x64-musl

问题描述 投票:0回答:1

我已经设置了 docker 配置来运行我的 React 应用程序,但是在启动容器时,我遇到以下错误:

frontend-1  | failed to load config from /app/vite.config.ts
frontend-1  | error when starting dev server:
frontend-1  | Error: Cannot find module @rollup/rollup-linux-x64-musl. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). Please try `npm i` again after removing both package-lock.json and node_modules directory.
frontend-1  |     at requireWithFriendlyError (/app/node_modules/rollup/dist/native.js:59:9)
frontend-1  |     at Object.<anonymous> (/app/node_modules/rollup/dist/native.js:68:76)
frontend-1  |     at Module._compile (node:internal/modules/cjs/loader:1368:14)
frontend-1  |     at Module._extensions..js (node:internal/modules/cjs/loader:1426:10)
frontend-1  |     at Module.load (node:internal/modules/cjs/loader:1205:32)
frontend-1  |     at Module._load (node:internal/modules/cjs/loader:1021:12)
frontend-1  |     at cjsLoader (node:internal/modules/esm/translators:366:17)
frontend-1  |     at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:315:7)
frontend-1  |     at ModuleJob.run (node:internal/modules/esm/module_job:222:25)
frontend-1  |     at async ModuleLoader.import (node:internal/modules/esm/loader:323:24)
frontend-1 exited with code 1

React 应用程序在 Docker 外部本地运行时可以正常运行,并且在使用 docker run 命令启动时也可以按预期运行。但是,当尝试使用 docker-compose up 启动应用程序时,它无法运行。我无法在网上找到解决方案。

Dockerfile:

FROM node:21-alpine

RUN npm install -g vite

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 5173

CMD ["vite", "--host", "0.0.0.0"]

docker-compose.yml:

version: '3.8'

services:
  reactApp:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    ports:
      - "9000:5173"

.dockerignore:

node_modules
package-lock.json
reactjs docker docker-compose dockerfile vite
1个回答
0
投票

我在尝试使用 vite 对 React 应用程序进行 dockerize 时遇到了同样的问题。

我设法通过向

docker-compose.yml
文件添加命名卷来解决该问题,如下所示:

dashboard:
    container_name: dashboard
    image: dashboard
    depends_on:
      - postgres
    build:
      context: ../../packages/dashboard
      dockerfile: Dockerfile
    ports:
      - "5173:5173"
    volumes:
      - ../../packages/dashboard:/app
      - node_modules:/app/node_modules
volumes:
  pgdata: {}
  node_modules: {}

说实话,我不知道为什么它有帮助。我查询了 Perplexity(LLM 工具),它表明它与 ARM64 处理器有关(我使用的是 M2 Pro Mackbook Pro)。

Perplexity 的解释是这样的:

根本原因似乎是,当您使用volumes部分将本地node_modules目录挂载到Docker容器中时,它会尝试使用本地计算机中的二进制文件,这些二进制文件可能是为不同的体系结构(例如x86_64)编译的,并且是与容器内的ARM64架构不兼容。

其参考文献之一是 this GitHub 关于同一问题的讨论。

© www.soinside.com 2019 - 2024. All rights reserved.