使用容器注册表

您可以在使用包命名空间 https://ghcr.io 的 Container registry 中存储和管理 Docker 和 OCI 映像。

GitHub Packages is available with GitHub Free, GitHub Pro, GitHub Free for organizations, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server 3.0 or higher, and GitHub AE.


GitHub Packages 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 此外,使用旧版按仓库计划的帐户无法访问 Container registry,因为这些帐户是按仓库计费的。 更多信息请参阅“[GitHub 的产品](/get-started/learning-about-github/githubs-products)”。

关于 Container registry 支持

Container registry 目前支持以下容器映像格式:

在安装或发布 Docker 映像时,Container registry 支持外部层,如 Windows 映像。

向 Container registry 验证

To authenticate to the Container registry within a GitHub Actions workflow, use the GITHUB_TOKEN for the best security and experience. If your workflow is using a personal access token (PAT) to authenticate to ghcr.io, then we highly recommend you update your workflow to use the GITHUB_TOKEN.

For guidance on updating your workflows that authenticate to ghcr.io with a personal access token, see "Upgrading a workflow that accesses ghcr.io."

For more information about the GITHUB_TOKEN, see "Authentication in a workflow."

If you're using the Container registry in actions, follow our security best practices at "Security hardening for GitHub Actions."

  1. 针对要完成的任务,新创具有适当作用域的个人访问令牌 (PAT)。 如果您的组织需要 SSO,则必须为新令牌启用 SSO。

    注意: 默认情况下, 当您在用户界面中选择 write:packages 范围的个人访问令牌 (PAT) 时,repo 范围也将被选中。 repo 范围提供了不必要和广泛的访问权限,我们建议您尤其避免使用 GitHub Actions 工作流程。 更多信息请参阅“GitHub Actions 的安全性增强”。 作为一种解决方法,您可以在以下 URL 的用户界面中为 PAT 选择 write:packages 范围:https://github.com/settings/tokens/new?scopes=write:packages

    • 选择 read:packs 作用域以下载容器映像并读取其元数据。
    • 选择 write:packages 作用域以下载和上传容器映像并读取和写入其元数据。
    • 选择 delete:packages 作用域以删除容器映像。

    更多信息请参阅“创建用于命令行的个人访问令牌。”

  2. 保存您的 PAT。 我们建议将 PAT 保存为环境变量。

    $ export CR_PAT=YOUR_TOKEN
  3. 使用您的容器类型的 CLI 登录到 ghcr.io 上的 Container registry 服务。

    $ echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
      > Login Succeeded

推送容器映像

此示例推送最新版本的 IMAGE-NAME

$ docker push ghcr.io/OWNER/IMAGE_NAME:latest

此示例推送 2.5 版的映像。

$ docker push ghcr.io/OWNER/IMAGE-NAME:2.5

首次发布包时,默认可见性是私有的。 要更改可见性或设置访问权限,请参阅“配置包的访问控制和可见性”。

拉取容器映像

通过摘要拉取

为了确保始终使用相同的映像,您可以通过 digest SHA 值指定要拉取的准确容器映像版本。

  1. 要查找摘要 SHA 值,请使用 docker inspectdocker pull,并复制 Digest: 后的 SHA 值

    $ docker inspect ghcr.io/OWNER/IMAGE_NAME
  2. 按需要在本地删除映像。

    $ docker rmi  ghcr.io/OWNER/IMAGE_NAME:latest
  3. 拉取图像名称后有 @YOUR_SHA_VALUE 的容器映像。

    $ docker pull ghcr.io/OWNER/IMAGE_NAME@sha256:82jf9a84u29hiasldj289498uhois8498hjs29hkuhs

按名称拉取

$ docker pull ghcr.io/OWNER/IMAGE_NAME

按名称和版本拉取

显示按名称和 1.14.1 版本标记拉取映像的 Docker CLI 示例:

$ docker pull ghcr.io/OWNER/IMAGE_NAME:1.14.1
  > 5e35bd43cf78: Pull complete
  > 0c48c2209aab: Pull complete
  > fd45dd1aad5a: Pull complete
  > db6eb50c2d36: Pull complete
  > Digest: sha256:ae3b135f133155b3824d8b1f62959ff8a72e9cf9e884d88db7895d8544010d8e
  > Status: Downloaded newer image for ghcr.io/orgname/image-name/release:1.14.1
  > ghcr.io/orgname/image-name/release:1.14.1

按名称和最新版本拉取

$ docker pull ghcr.io/OWNER/IMAGE_NAME:latest
  > latest: Pulling from user/image-name
  > Digest: sha256:b3d3e366b55f9a54599220198b3db5da8f53592acbbb7dc7e4e9878762fc5344
  > Status: Downloaded newer image for ghcr.io/user/image-name:latest
  > ghcr.io/user/image-name:latest

构建容器映像

此示例构建 hello_docker 映像:

$ docker build -t hello_docker .

标记容器映像

  1. 找到要标记的 Docker 映像的 ID。

    $ docker images
    > REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
    > ghcr.io/my-org/hello_docker         latest              38f737a91f39        47 hours ago        91.7MB
    > ghcr.io/my-username/hello_docker    latest              38f737a91f39        47 hours ago        91.7MB
    > hello-world                                           latest              fce289e99eb9        16 months ago       1.84kB
  2. 使用映像 ID 以及所需的映像名称和托管目标标记 Docker 映像。

    $ docker tag 38f737a91f39 ghcr.io/OWNER/NEW_IMAGE_NAME:latest

此文档对您有帮助吗?

隐私政策

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或者, 了解如何参与。