Skip to main content

此版本的 GitHub Enterprise Server 已于以下日期停止服务 2024-09-25. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

使用 Docker 注册表

您可以使用 GitHub Packages Docker 注册表推送和拉取您的 Docker 映像。

Note

这种包类型可能不适用于你的实例,因为站点管理员可以启用或禁用每种支持的包类型。 有关详细信息,请参阅“为企业配置包生态系统支持”。

关于 Docker 支持

安装或发布 Docker 映像时,Docker 注册表目前不支持外部层,例如 Windows 映像。

Docker Engine v25 与 GitHub Enterprise Server 上的 Docker 注册表不兼容。 建议改用 Container registry。 有关迁移的信息,请参阅“从 Docker 注册表迁移到容器注册表”。

向 GitHub Packages 验证

Note

GitHub Packages 仅支持使用 personal access token (classic) 进行身份验证。 有关详细信息,请参阅“管理个人访问令牌”。

需要访问令牌才能发布、安装和删除专用、内部和公共包。

可使用 personal access token (classic) 向 GitHub Packages 或 GitHub Enterprise Server API 进行身份验证。 创建 personal access token (classic) 时,可根据需要为令牌分配不同的作用域。 有关 personal access token (classic) 的包相关范围的详细信息,请参阅“关于 GitHub Packages 的权限”。

要在 GitHub Actions 工作流程内向 GitHub Packages 注册表验证,您可以使用:

  • GITHUB_TOKEN 发布与工作流存储库相关联的包。
  • 范围至少为 read:packages 的 personal access token (classic),用于安装与其他专用存储库(GITHUB_TOKEN 无法访问)关联的包。

有关 GitHub Actions 工作流中使用的 GITHUB_TOKEN 的详细信息,请参阅“自动令牌身份验证”。

使用 personal access token 进行身份验证

必须使用具有适当范围的 personal access token (classic) 才可在 GitHub Packages 中发布和安装包。 有关详细信息,请参阅“GitHub Packages 简介”。

可以使用 docker 登录命令,通过 Docker 向 GitHub Packages 验证。

为了确保凭据安全,我们建议将 personal access token 保存在计算机的本地文件中,然后使用 Docker 的 --password-stdin 标志从本地文件读取令牌。

如果实例启用了子域隔离:

cat ~/TOKEN.txt | docker login docker.HOSTNAME -u USERNAME --password-stdin

如果实例禁用了子域隔离:

cat ~/TOKEN.txt | docker login HOSTNAME -u USERNAME --password-stdin

要使用此示例登录命令,请将 USERNAME 替换为 GitHub Enterprise Server 用户名,将 HOSTNAME 替换为 你的 GitHub Enterprise Server 实例 的 URL,并将 ~/TOKEN.txt 替换为用于 GitHub Enterprise Server 的 personal access token 的文件路径。

有关详细信息,请参阅 Docker 登录

发布映像

Note

GitHub Packages Docker 注册表将在未来的GitHub Enterprise Server版本中被Container registry取代,后者提供了改进的容器支持。

Note

映像名称只能使用小写字母。

GitHub Packages 支持每个仓库的多个顶层 Docker 镜像。 仓库可以拥有任意数量的映像标记。 在发布或安装大于 10GB 的 Docker 映像(每个图层上限为 5GB)时,可能会遇到服务降级的情况。 有关详细信息,请参阅 Docker 文档中的 Docker 标记

在发布包后,您可以在 GitHub 上查看该包。 有关详细信息,请参阅“查看包”。

  1. 使用 docker images 确定 Docker 映像的名称和 ID。

    $ docker images
    > <&nbsp>
    > REPOSITORY        TAG        IMAGE ID       CREATED      SIZE
    > IMAGE_NAME        VERSION    IMAGE_ID       4 weeks ago  1.11MB
    
  2. 使用 Docker 映像 ID、标记和 Docker 映像将 OWNER 替换为拥有存储库的个人帐户或组织的名称,将 REPOSITORY 替换为包含你的项目的存储库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 HOSTNAME 替换为 你的 GitHub Enterprise Server 实例 的主机名,并将 VERSION 替换为生成时的包版本。

如果实例启用了子域隔离:

docker tag IMAGE_ID docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
如果实例禁用了子域隔离:
docker tag IMAGE_ID HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
  1. 如果尚未为包生成 Docker 映像,请生成映像,将 OWNER 替换为拥有存储库的个人帐户或组织的名称,将 REPOSITORY 替换为包含你的项目的存储库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 VERSION 替换为生成时的包版本,将 HOSTNAME 替换为 你的 GitHub Enterprise Server 实例 的主机名,并将 PATH 替换为映像路径(如果映像未在当前工作目录中)。

如果实例启用了子域隔离:

docker build -t docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION PATH
如果实例禁用了子域隔离:
docker build -t HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION PATH
  1. 将映像发布到 GitHub Packages。

如果实例启用了子域隔离:

docker push docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
如果实例禁用了子域隔离:
docker push HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION

Note

必须使用 IMAGE_NAME:VERSION 而不是 IMAGE_NAME:SHA 推送映像。

发布 Docker 映像的示例

这些示例假设实例已启用子域隔离。

可以使用映像 ID 将 monalisa 映像的 1.0 版本发布到 octocat/octo-app 存储库。

$ docker images

> REPOSITORY           TAG      IMAGE ID      CREATED      SIZE
> monalisa             1.0      c75bebcdd211  4 weeks ago  1.11MB

# Tag the image with OWNER/REPO/IMAGE_NAME
$ docker tag c75bebcdd211 docker.HOSTNAME/octocat/octo-app/monalisa:1.0

# Push the image to GitHub Packages
$ docker push docker.HOSTNAME/octocat/octo-app/monalisa:1.0

首次可以发布新的 Docker 映像并将其命名为 monalisa

# Build the image with docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
# Assumes Dockerfile resides in the current working directory (.)
$ docker build -t docker.HOSTNAME/octocat/octo-app/monalisa:1.0 .

# Push the image to GitHub Packages
$ docker push docker.HOSTNAME/octocat/octo-app/monalisa:1.0

下载图像

Note

GitHub Packages Docker 注册表将在未来的GitHub Enterprise Server版本中被Container registry取代,后者提供了改进的容器支持。

可使用 docker pull 命令从 GitHub Packages 安装 Docker 映像,将 OWNER 替换为拥有存储库的个人帐户或组织的名称,将 REPOSITORY 替换为包含你的项目的存储库的名称,将 IMAGE_NAME 替换为包或映像的名称,将 HOSTNAME 替换为 你的 GitHub Enterprise Server 实例 的主机名,并将 TAG_NAME 替换为要安装的映像的标记。

如果实例启用了子域隔离:

docker pull docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:TAG_NAME

如果实例禁用了子域隔离:

docker pull HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:TAG_NAME

Note

注意:必须使用 IMAGE_NAME:VERSION 而不是 IMAGE_NAME:SHA 拉取映像。

其他阅读材料