我已经设置了 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
我在尝试使用 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 关于同一问题的讨论。