3.8. 将 docker 凭证用于私有容器镜像仓库

您可以为构建提供 .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. 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

    您还可以将 push secret 与构建使用的服务帐户链接,而不指定 pushSecret 字段。默认情况下,构建使用 builder 服务帐户。如果 secret 包含与托管构建输出镜像的存储库匹配的凭证,则 push secret 会自动添加到构建中。

    $ oc secrets link builder dockerhub
  3. 通过指定 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 构建。

    您还可以将 pull secret 链接到构建使用的服务帐户,而不指定 pullSecret 字段。默认情况下,构建使用 builder 服务帐户。如果 secret 包含与托管构建的输入镜像的存储库匹配的凭证,pull secret 会自动添加到构建中。将 pull secret 链接到构建使用的服务帐户,而不指定 pullSecret 字段:

    $ oc secrets link builder dockerhub
    注意

    您必须在 BuildConfig spec 中指定一个 from 镜像,才能利用此功能。由 oc new-buildoc new-app 生成的 Docker 策略构建在某些情况下可能无法进行这个操作。