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

树莓派4部署Docker Node容器遇exec format error问题求助

树莓派4部署Docker容器遇exec format error问题

环境信息

  • 树莓派4系统:linux aarch64 Debian GNU/Linux 11 (bullseye)
  • Docker版本:24.0.7,build afdd53b

问题详情

上周部署还一切正常,未修改docker-entrypoint.sh,但现在容器卡在执行/usr/local/bin/docker-entrypoint.sh阶段,抛出exec format error错误。容器本应先执行脚本处理MySQL数据库迁移,再启动托管Angular前端的NestJs后端应用,但脚本从未执行。Windows和MacBook上部署相同栈无异常。

相关配置文件

Dockerfile

FROM --platform=$BUILDPLATFORM node:20.9-alpine AS build-client

WORKDIR /client

COPY package*.json .

RUN npm ci

COPY . .

RUN npx nx build client


FROM --platform=$BUILDPLATFORM node:20.9-alpine AS build-server

WORKDIR /server

COPY package*.json .

RUN apk update && \
    apk upgrade && \
    apk add --virtual build-deps --no-cache python3 make g++ && \
    npm ci

COPY . .

RUN npx nx build server &&  \
    mv packages/server/typeorm dist/database && \
    rm -rf node_modules && \
    npm ci --omit dev && \
    mv packages/server/start.sh package*.json dist && \
    chmod +x dist/start.sh && \
    mv node_modules dist/node_modules && \
    rm -rf dist/node_modules/@dnd-mapp/data && \
    mv dist/data dist/node_modules/@dnd-mapp/data

COPY --from=build-client /client/dist/client dist/client


FROM --platform=$BUILDPLATFORM node:20.9-alpine

WORKDIR /usr/src/app

RUN apk add --no-cache bash

COPY --from=build-server server/dist .

ENV DATABASE_FILES_PATH=/usr/src/app/database
ENV HOST=0.0.0.0

EXPOSE 8080

CMD ["bash", "/usr/src/app/start.sh"]

GitHub工作流(docker-image.yaml)

name: Build DnD-Mapp Docker image
on:
    push:
permissions:
    contents: read
    packages: write
env:
    REGISTRY: ghcr.io
    IMAGE_NAME: nonamer777/dnd-mapp
jobs:
    build-docker-image:
        name: Build DnD-Mapp Docker image
        runs-on: ubuntu-latest
        steps:
            - name: Checkout repository
              uses: actions/checkout@v4
            - name: Set up QEMU
              uses: docker/setup-qemu-action@v3
            - name: Set up Docker Buildx
              uses: docker/setup-buildx-action@v3
              id: docker-buildx
              with:
                  platforms: linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/amd64
            - name: Log in to the Container registry
              uses: docker/login-action@v3
              with:
                  registry: ${{ env.REGISTRY }}
                  username: ${{ github.actor }}
                  password: ${{ secrets.GITHUB_TOKEN }}
            - name: Extract metadata for Docker
              id: meta
              uses: docker/metadata-action@v5
              with:
                  images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
                  tags: |
                      type=raw,value=dev
                      type=semver,pattern={{version}}
                      type=semver,pattern={{major}}
                      type=semver,pattern={{major}}.{{minor}}
            - name: Build and push Docker image
              uses: docker/build-push-action@v5
              with:
                  context: .
                  file: Dockerfile
                  push: true
                  labels: ${{ steps.meta.outputs.labels }}
                  tags: ${{ steps.meta.outputs.tags }}
                  platforms: ${{ steps.docker-buildx.outputs.platforms }}
                  cache-from: type=gha
                  cache-to: type=gha,mode=max

Docker Compose配置(compose.yaml)

services:
    dnd-mapp:
        image: ghcr.io/nonamer777/dnd-mapp:dev
        container_name: dnd-mapp
        env_file: .env
        restart: unless-stopped
        ports:
            - '8080:8080/tcp'
        depends_on:
            db:
                condition: service_healthy
    db-web-client:
        image: adminer:4
        container_name: mysql-web-client
        restart: unless-stopped
        ports:
            - '8888:8080/tcp'
        depends_on:
            db:
                condition: service_healthy 
    db:
        image: mysql:8
        container_name: mysql-database
        restart: unless-stopped
        ports:
            - '3306:3306/tcp'
        environment:
            MYSQL_ROOT_PASSWORD: password
            MYSQL_DATABASE: my_db
            MYSQL_USER: db_user
            MYSQL_PASSWORD: password
        networks:
            - private-network
        healthcheck:
            test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
            timeout: 10s
            interval: 5s
            retries: 10

已尝试的解决方法

  • 降级作为基础镜像的Docker Node版本,未解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:17:28