name: Docker Image CI on: workflow_dispatch: push: branches: - main jobs: build: runs-on: ubuntu-latest # 🌟 关键点 1: 启动一个 Docker 守护进程容器 (DinD) services: docker: image: docker:dind options: --privileged ports: - 2376:2376 # 🌟 关键点 2: 告诉所有步骤通过 TCP 连接 Docker,而不是 Socket env: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: /certs/client DOCKER_TLS_CERTDIR: /certs steps: - name: Checkout code uses: actions/checkout@v4 # 🌟 关键点 3: 配置 Buildx 使用上面定义的 docker 容器驱动 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: driver: docker-container endpoint: tcp://docker:2376 - name: Log in to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ gitea.server_url }} username: ${{ gitea.actor }} password: ${{ secrets.GITEA_TOKEN }} - name: Build and push Docker image run: | DOMAIN=$(echo "${{ gitea.server_url }}" | sed -e 's|^[^/]*//||' -e 's|/.*$||') REPO_LOWER=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]') IMAGE_NAME="$DOMAIN/$REPO_LOWER" echo "Pushing to: $IMAGE_NAME" docker build . --file Dockerfile \ --tag "$IMAGE_NAME:latest" \ --tag "$IMAGE_NAME:${{ gitea.sha }}" docker push "$IMAGE_NAME:latest" docker push "$IMAGE_NAME:${{ gitea.sha }}"