name: Docker Image CI on: workflow_dispatch: push: branches: - main jobs: build-and-push: runs-on: ubuntu-latest # 1. 【关键】删除 container 字段,直接使用 Runner 的宿主环境 # container: # image: catthehacker/ubuntu:act-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get Meta id: meta run: | REGISTRY_HOST=$(echo "${{ gitea.server_url }}" | sed -E 's/^\s*.*:\/\///g') REPO_LOWER=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]') echo "REGISTRY_HOST=$REGISTRY_HOST" >> $GITHUB_OUTPUT echo "IMAGE_NAME=$REPO_LOWER" >> $GITHUB_OUTPUT echo "VERSION_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT # 2. 【关键】Rootless 环境通常无法动态加载 QEMU,必须注释掉 # - name: Set up QEMU # uses: docker/setup-qemu-action@v3 # 3. 【关键】配置 Buildx 使用 docker 驱动 # 默认的 docker-container 驱动在 rootless 下可能有网络/权限问题 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: driver: docker - name: Log in to Gitea Registry uses: docker/login-action@v3 with: registry: ${{ steps.meta.outputs.REGISTRY_HOST }} username: ${{ gitea.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile push: true # 4. 【注意】如果去掉了 QEMU,这里通常只能保留当前 Runner 的架构(如 linux/amd64) # 去掉 linux/arm64,除非你的 Runner 本身就是 ARM 的或者宿主机已开启 QEMU 支持 platforms: linux/amd64 tags: | ${{ steps.meta.outputs.REGISTRY_HOST }}/${{ steps.meta.outputs.IMAGE_NAME }}:latest ${{ steps.meta.outputs.REGISTRY_HOST }}/${{ steps.meta.outputs.IMAGE_NAME }}:${{ steps.meta.outputs.VERSION_SHA }}