首页/开发/CI/CD 与发布速查/GitHub Packages 与 GHCR
构建与制品管理58 条

GitHub Packages 与 GHCR

GitHub 生态的包与容器镜像托管(ghcr.io):与仓库权限打通,GITHUB_TOKEN 可认证,支持包级可见性与继承仓库权限。

CI/CD 与发布速查开发更新于 2026-10-13

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。

易错点

  • 未声明 packages: write 就 push:权限错误往往在步骤末尾才报,先给足最小权限
  • 公共镜像被意外设为公开:推送后检查包可见性,避免内部制品外泄
  • GITHUB_TOKEN 权限随仓库设置变化:继承来的默认权限可能过宽,工作流里显式声明 permissions
  • 用个人 PAT 推包且过期无人知:自动化改用工作流令牌,PAT 仅作短期调试
  • 预览包长期公开可见:预发镜像用完及时改私有或删除,避免外部用户误用未验证版本

数据来源与参考

  • GitHub Docs《Working with the Container registry》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌