本项目包含三种 GitHub Actions 工作流配置,用于自动构建并推送 Docker 镜像到 Docker Hub。
.github/workflows/
├── docker-build-simple.yml # 简单版(推荐新手)
├── docker-build.yml # 标准版(推荐)
└── docker-build-advanced.yml # 高级版(多架构、多变体)
根据你的需求选择一个工作流文件:
- ✅ 适合快速开始
- ✅ 配置简单
- ❌ 仅支持 AMD64 架构
- ❌ 功能较少
- ✅ 支持多架构(AMD64, ARM64, ARM v7)
- ✅ 自动版本标签
- ✅ 自动更新 Docker Hub 描述
- ✅ 构建缓存优化
- ✅ 支持多个镜像变体(标准版、Alpine 版)
- ✅ 安全扫描(Trivy)
- ✅ 同时推送到 Docker Hub 和 GitHub Container Registry
- ✅ 定时构建
- ✅ 手动触发选项
在 GitHub 仓库中设置以下 Secrets:
- 进入仓库 Settings > Secrets and variables > Actions
- 点击 "New repository secret"
- 添加以下 Secrets:
| Secret 名称 | 说明 | 如何获取 |
|---|---|---|
DOCKERHUB_USERNAME |
Docker Hub 用户名 | 你的 Docker Hub 用户名 |
DOCKERHUB_TOKEN |
Docker Hub 访问令牌 | 见下方获取步骤 |
- 登录 Docker Hub
- 点击右上角头像 > Account Settings
- Security > New Access Token
- Token description:
GitHub Actions - Access permissions:
Read, Write, Delete - Generate Token
- 立即复制 Token(只显示一次!)
- 在 GitHub 中添加为
DOCKERHUB_TOKEN
编辑 Dockerfile 中的标签信息:
LABEL maintainer="your-email@example.com" \
org.opencontainers.image.source="https://github.com/your-username/your-repo"对于 docker-build-simple.yml:
env:
IMAGE_NAME: your-dockerhub-username/caddy-forward-proxy对于 docker-build.yml:
env:
DOCKER_IMAGE: your-dockerhub-username/caddy-forward-proxy对于 docker-build-advanced.yml:
env:
IMAGE_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/caddy-forward-proxy如果你选择使用其中一个工作流,可以删除其他的:
# 保留简单版,删除其他
rm .github/workflows/docker-build.yml
rm .github/workflows/docker-build-advanced.yml
# 或保留标准版,删除其他
rm .github/workflows/docker-build-simple.yml
rm .github/workflows/docker-build-advanced.ymlgit add .
git commit -m "Add GitHub Actions workflow"
git push origin main工作流会在以下情况自动运行:
- ✅ Push 到
main分支 - ✅ 创建
v*标签(如 v1.0.0)
- ✅ Push 到
main或master分支 - ✅ 创建
v*.*.*标签 - ✅ Pull Request 到
main或master(仅构建,不推送)
- ✅ Push 到
main或develop分支 - ✅ 创建
v*.*.*标签 - ✅ Pull Request 到
main - ✅ 每周一凌晨 2 点自动构建
- 进入 GitHub 仓库
- Actions 标签
- 选择工作流
- Run workflow 按钮
- 选择分支
- Run workflow
# Push 到 main 分支
your-username/caddy-forward-proxy:latest
your-username/caddy-forward-proxy:main
your-username/caddy-forward-proxy:main-abc1234
# 创建版本标签 v1.2.3
your-username/caddy-forward-proxy:1.2.3
your-username/caddy-forward-proxy:1.2
your-username/caddy-forward-proxy:1
your-username/caddy-forward-proxy:latest
# Pull Request #42
your-username/caddy-forward-proxy:pr-42# 标准版
your-username/caddy-forward-proxy:latest
your-username/caddy-forward-proxy:1.2.3
# Alpine 版
your-username/caddy-forward-proxy:alpine
your-username/caddy-forward-proxy:1.2.3-alpine| 工作流 | 支持的架构 |
|---|---|
| Simple | linux/amd64 |
| Standard | linux/amd64, linux/arm64, linux/arm/v7 |
| Advanced | linux/amd64, linux/arm64, linux/arm/v7 |
- 进入 GitHub 仓库
- Actions 标签
- 点击具体的工作流运行
- 查看每个步骤的日志
编辑工作流文件的 PLATFORMS 环境变量:
env:
PLATFORMS: linux/amd64,linux/arm64
# 移除 ARM v7 支持,仅保留 AMD64 和 ARM64同时推送到 GitHub Container Registry:
在 docker-build.yml 中添加:
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.DOCKER_IMAGE }}
ghcr.io/${{ github.repository }}在 Build and push 步骤中添加:
build-args: |
CADDY_VERSION=v2.7.6
CUSTOM_ARG=value解决方案:
- 确认
DOCKERHUB_USERNAME是用户名,不是邮箱 - 重新生成
DOCKERHUB_TOKEN - 确认 Secrets 名称拼写正确
解决方案:
- 确认镜像名称格式:
username/repository - 检查工作流中的
DOCKER_IMAGE或IMAGE_NAME - 确认 Docker Hub 仓库已创建
解决方案:
- 减少支持的架构数量
- 启用构建缓存
- 考虑使用自托管 Runner
# 创建版本标签
git tag -a v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0在 GitHub 仓库设置中:
- Settings > Branches
- Add rule for
main - Require pull request reviews
- Require status checks (选择构建工作流)
# 测试构建的镜像
docker pull your-username/caddy-forward-proxy:latest
docker run -d -p 443:443 your-username/caddy-forward-proxy:latest