简介

白嫖github的算力和存储空间,来编译存放docker镜像。 docker pull ghcr.io/cn4096/xxx:latest

准备文件

文件结构如下

把容器里运行所需文件准备好,如果是跨平台的,就把各个平台的都放进去。

修改Dockerfile

# 使用 Alpine 作为基础镜像
FROM alpine:latest

# 安装必要的运行时依赖
RUN apk add --no-cache \
    ca-certificates \
    libc6-compat \
    && rm -rf /var/cache/apk/*

# 创建非 root 用户
RUN adduser -D -u 1000 user
USER user

# 设置工作目录
ENV HOME=/home/user
WORKDIR $HOME/app

# ✅ 关键修复:必须在 FROM 之后显式声明这些变量,RUN 步骤才能读到值
ARG TARGETPLATFORM
ARG TARGETOS
ARG TARGETARCH

# 将所有可执行文件复制到容器内
COPY --chown=user . .

# 动态查找并准备可执行文件
RUN <<EOF
#!/bin/sh
set -e

echo "Building for platform: $TARGETPLATFORM"
echo "=== 当前目录文件 ==="
ls -la

# 根据 TARGETPLATFORM 映射到实际的文件名
case "$TARGETPLATFORM" in
  "linux/amd64")
    FILE_PATTERN="erp-linux-amd64-x64"
    ;;
  "linux/arm64"|"linux/aarch64")
    FILE_PATTERN="erp-linux-arm64-arm64"  # ⚠️ 请确认你的实际文件名
    ;;
  *)
    echo "Unsupported platform: $TARGETPLATFORM"
    exit 1
    ;;
esac

# 检查文件是否存在
if [ ! -f "$FILE_PATTERN" ]; then
  echo "Error: Could not find binary: $FILE_PATTERN"
  exit 1
fi

echo "Found binary: $FILE_PATTERN"
cp "$FILE_PATTERN" erp-binary
chmod +x erp-binary
echo "Successfully prepared erp-binary for $TARGETPLATFORM"
EOF

# 声明服务端口
EXPOSE 8080

# 启动命令
CMD ["./erp-binary"]

这是多平台镜像的核心: 根据 TARGETPLATFORM 映射到实际的文件名

新建action

创建这个文件 docker-image.yml ,该文件是告诉gayhub的编译机器(其实也是容器),要如何编译镜像,如何发布等。
2026-03-18T12:20:30.png

name: Build and Push Docker Image

on:
  push:
    branches: [ main ]
    paths:
      - 'Dockerfile'
      - 'erp-linux-amd64-x64'
      - 'erp-linux-arm64-arm64'
  pull_request:
    branches: [ main ]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Log in to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build and push Docker image
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          platforms: linux/amd64,linux/arm64
          tags: |
            ghcr.io/${{ github.repository_owner }}/aerp:latest
          labels: |
            org.opencontainers.image.source=https://github.com/${{ github.repository }}
            org.opencontainers.image.description=HTTP Server
            org.opencontainers.image.licenses=MIT
          cache-from: type=gha
          cache-to: type=gha,mode=max

编译镜像

2026-03-18T12:22:29.png

收货

点进去

2026-03-18T12:22:59.png

复制镜像地址

点进去,就有了

2026-03-18T12:23:40.png