我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

推送和拉取 Docker 映像

您可以在 GitHub Container Registry 中存储和管理 Docker 映像。

GitHub Packages 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 2.22 和 GitHub One。


GitHub Packages 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 GitHub Packages 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud 和 GitHub One。 For more information, see "[GitHub's products](/articles/github-s-products)."

本文内容

此文档对您有帮助吗?

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

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

做出贡献

或, 了解如何参与。

注:GitHub Container Registry 目前处于公测阶段,可能会更改。 目前,GitHub Container Registry 只支持 Docker 映像格式。 在测试阶段,存储和带宽是免费的。 更多信息请参阅“关于 GitHub Container Registry”。

要推送和拉取组织拥有的容器映像,组织管理员必须为组织启用 GitHub Container Registry。 更多信息请参阅“为组织启用 GitHub Container Registry”。

向 GitHub Container Registry 验证

If you want to authenticate to GitHub Container Registry in a GitHub Actions workflow, then you must use a personal access token (PAT). The GITHUB_TOKEN does not currently have the required permissions. During the GitHub Container Registry beta, the only supported form of authentication is the PAT.

PATs can grant broad access to your account. We recommend selecting only the necessary read, write, or delete package scope when creating a PAT to authenticate to the container registry. Avoid including the repo scope in a PAT used by a GitHub Actions workflow because it gives unnecessary additional access.

If you'd like to use the container registry in actions during the beta, follow our security best practices for PAT use at "Security hardening for GitHub Actions."

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

    Note: If you select the write:packages scope, deselect the repo scope when creating the PAT. Adding a PAT with the repo scope as a secret in your repository allows the credential to be accessible to all collaborators in the repository. This gives unnecessary additional access when a PAT with the repo scope is used within an action. For more information on security best practices for actions, see "Security hardening for GitHub Actions."

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

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

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

    $ export CR_PAT=YOUR_TOKEN
  3. Using the CLI for your container type, sign in to the GitHub Container Registry service at ghcr.io.

    $ 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 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。