You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用docker-compose共享运行Node.js应用遇错求助

问题分析与解决方案

1. 构建时找不到package.json的问题

报错npm ERR! enoent ENOENT: no such file or directory, open '/usr/src/app/package.json'的核心原因:

  • 树莓派上执行构建的目录(~/projects)里缺少package.json和完整的应用源代码。Dockerfile里的COPY . ./是把当前命令执行目录下的所有文件拷贝到容器中,若该目录仅存在docker-compose.yaml、Dockerfile和.env,自然找不到package.json。
  • 可能存在.dockerignore或.gitignore文件,将package.json或项目核心文件排除,导致COPY命令未复制这些关键文件。

解决方法:

  • 将完整的Node.js应用代码(包括package.json、src目录、依赖配置文件等)全部放到树莓派的~/projects目录下,保证与开发机的项目结构一致。
  • 检查当前目录下的.dockerignore文件,若存在排除package.json、src等关键文件的规则,直接删除对应规则。

2. exec format error执行格式错误

这个错误由架构不兼容导致:树莓派是ARM架构(armv7/arm64),而你在x86架构开发机上构建的镜像仅能在x86设备运行,直接拉取到树莓派就会出现执行格式不匹配的问题。

解决方法:

方案一:在树莓派本地构建镜像

你的docker-compose.yaml已配置build字段,直接在树莓派上执行以下命令,会自动构建适配ARM架构的镜像:

docker-compose build
docker-compose up -d

注意:执行前需确保项目代码已完整放到树莓派对应目录下。

方案二:构建多架构镜像推送至Github Packages

若需要在多架构设备间共享镜像,可使用Docker Buildx构建支持x86和ARM的多架构镜像:

# 创建并启用buildx构建器
docker buildx create --use
# 构建并推送多架构镜像
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t ghcr.io/rkn-put/web-app/docker-backend/test --push .

之后树莓派拉取镜像时会自动匹配对应的ARM版本。

额外配置冲突说明

你的docker-compose.yaml同时指定了build和image字段,若先拉取了x86架构的镜像,再执行本地构建,可能出现镜像版本冲突。建议:

  • 若选择本地构建,先删除已拉取的x86镜像:docker rmi ghcr.io/rkn-put/web-app/docker-backend/test
  • 若选择拉取多架构镜像,可去掉build字段,直接使用镜像运行。

关于所需文件的说明

除docker-compose.yaml、Dockerfile和.env外,你还需要完整的Node.js应用源代码(包括package.json、src目录、所有依赖配置和业务代码文件),否则Docker无法完成构建与运行。


内容的提问来源于stack exchange,提问作者Tomasz Jankowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:25:35