GHCR 是什么
GitHub Packages 是 GitHub 的包与镜像托管服务,其中容器镜像部分运行在 ghcr.io。它与仓库权限体系打通:Actions 里用内置的 GITHUB_TOKEN 认证(需要 packages: write 权限),无需另配长期凭据;包可以继承仓库权限,也可以独立设置可见性。除容器外,Packages 还托管 npm、Maven、NuGet 等包,一个账号体系贯通。
基本信息
| 适用平台 | GitHub 个人账号与组织,Actions 原生集成 |
|---|---|
| 容器地址 | ghcr.io/<owner>/<image> |
| 认证 | GITHUB_TOKEN(Actions 内)或 PAT(本地调试);packages: write 权限 |
| 可见性 | 包可继承仓库权限或独立设置 |
典型使用场景
- 私有镜像托管:内部服务镜像放私有包,权限随代码仓库走
- Actions 构建推送:工作流内用 GITHUB_TOKEN 推镜像,零长期凭据
- 开源分发:公共镜像作为项目发布渠道,用户可免登录拉取
- 多仓库复用:组织内跨仓库授权后共享基础镜像
- 依赖包托管:npm、Maven 等私有包与镜像同一账号体系管理
- 依赖镜像缓存:把公共基础镜像同步到组织内,境外拉取不稳定时用内网就近分发
Actions 推送镜像
Actions 推送镜像
permissions:
contents: read
packages: write # 缺这行 push 会在末尾才报权限错误
steps:
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- run: docker push ghcr.io/${{ github.repository }}:1.8.0权限与可见性速查
| 维度 | 选项 | 提示 |
|---|---|---|
| 包可见性 | 公开 / 私有 / 内部 | 可继承仓库或独立设置 |
| 推送权限 | packages: write | 先确认仓库的 Actions 权限没有收紧 |
| 读取权限 | 默认继承仓库 | 跨仓库共享需显式授权 |
| 包与仓库关系 | 包独立存在 | 删仓库不删包,治理时要单独盘点 |
组织级可设置包访问策略:默认继承仓库权限,跨仓库共享需要显式授权,临时授权用完记得收回。
包与仓库是弱绑定:删除或改名源仓库后包仍然存在,仓库归档不等于制品下线,治理时要单独盘点。
部署环境拉私有镜像需要只读凭据:用 fine-grained token 或工作流令牌提供,权限只给 read:packages。