3.8. 将 Docker 凭证用于私有 registry

您可以为构建提供 .docker/config.json 文件,在文件中包含私有容器 registry 的有效凭证。这样,您可以将输出镜像推送到私有容器镜像 registry 中,或从需要身份验证的私有容器镜像 registry 中拉取构建器镜像。

注意

对于 OpenShift Container Platform 容器镜像 registry,这不是必需的,因为 OpenShift Container Platform 会自动为您生成 secret。

默认情况下,.docker/config.json 文件位于您的主目录中,并具有如下格式:

auths:
  https://index.docker.io/v1/: 1
    auth: "YWRfbGzhcGU6R2labnRib21ifTE=" 2
    email: "user@example.com" 3
1
registry URL。
2
加密的密码。
3
用于登录的电子邮件地址。

您可以在此文件中定义多个容器镜像 registry 条目。或者,也可以通过运行 docker login 命令将身份验证条目添加到此文件中。如果文件不存在,则会创建此文件。

Kubernetes 提供Secret 对象,可用于存储配置和密码。

先决条件

  • .docker/config.json 文件

流程

  1. 从本地 .docker/config.json 文件创建 secret:

    $ oc create secret generic dockerhub \
        --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
        --type=kubernetes.io/dockerconfigjson

    这将生成名为 dockerhub 的 secret 的 JSON 规格并创建该对象。

  2. 创建 secret 后,将其添加到 builder 服务帐户。所有构建都使用 builder 角色来运行,因此您必须使用以下命令使其能访问您的 secret:

    $ oc secrets link builder dockerhub
  3. pushSecret 字段添加到 BuildConfig 中的 output 部分,并将它设为您创建的 secret 的名称,上例中为 dockerhub

    spec:
      output:
        to:
          kind: "DockerImage"
          name: "private.registry.com/org/private-image:latest"
        pushSecret:
          name: "dockerhub"

    您可以使用 oc set build-secret 命令在构建配置上设置推送 secret:

    $ oc set build-secret --push bc/sample-build dockerhub
  4. 通过指定 pullSecret 字段(构建策略定义的一部分),从私有容器镜像 registry 拉取构建器容器镜像:

    strategy:
      sourceStrategy:
        from:
          kind: "DockerImage"
          name: "docker.io/user/private_repository"
        pullSecret:
          name: "dockerhub"

    您可以使用 oc set build-secret 命令在构建配置上设置拉取 secret:

    $ oc set build-secret --pull bc/sample-build dockerhub
注意

本例在 Source 构建中使用 pullSecret,但也适用于 Docker 构建和 Custom 构建。