正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Docker-in-Dockerでレジストリに対して認証する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

Docker-in-Dockerを使用する場合、サービスによって新しいDockerデーモンが起動されるため、標準の認証方法は機能しません。

オプション1: docker loginを実行する

before_scriptで、docker loginを実行します:

default:
  image: docker:24.0.5-cli
  services:
    - docker:24.0.5-dind

variables:
  DOCKER_TLS_CERTDIR: "/certs"

build:
  stage: build
  before_script:
    - echo "$DOCKER_REGISTRY_PASS" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin
  script:
    - docker build -t my-docker-image .
    - docker run my-docker-image /script/to/run/tests

Docker Hubにサインインするには、$DOCKER_REGISTRYを空のままにするか、削除します。

オプション2: 各ジョブで~/.docker/config.jsonをマウントする

GitLab Runnerの管理者は、認証設定を含むファイルを~/.docker/config.jsonにマウントできます。そうすると、Runnerが取得するすべてのジョブはすでに認証済みです。公式のdocker:24.0.5イメージを使用している場合、ホームディレクトリは/rootです。

設定ファイルをマウントした場合、~/.docker/config.jsonを変更するdockerコマンドは失敗します。たとえばdocker loginは、ファイルが読み取り専用としてマウントされているために失敗します。読み取り専用属性を変更しないでください。問題を引き起こす原因となります。

次に示すのは、DOCKER_AUTH_CONFIGドキュメントに従った/opt/.docker/config.jsonの例です:

{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ="
        }
    }
}

Docker

ファイルを含めるようにボリュームマウントを更新します。

[[runners]]
  ...
  executor = "docker"
  [runners.docker]
    ...
    privileged = true
    volumes = ["/opt/.docker/config.json:/root/.docker/config.json:ro"]

Kubernetes

このファイルの内容でConfigMapを作成します。そのためには、次のようなコマンドを実行します:

kubectl create configmap docker-client-config --namespace gitlab-runner --from-file /opt/.docker/config.json

ファイルを含めるようにボリュームマウントを更新します。

[[runners]]
  ...
  executor = "kubernetes"
  [runners.kubernetes]
    image = "alpine:3.12"
    privileged = true
    [[runners.kubernetes.volumes.config_map]]
      name = "docker-client-config"
      mount_path = "/root/.docker/config.json"
      sub_path = "config.json"

オプション3: DOCKER_AUTH_CONFIGを使用する

すでにDOCKER_AUTH_CONFIGが定義されている場合は、その変数を使用して、それを~/.docker/config.jsonに保存できます。

この認証は、次の複数の方法で定義できます:

次の例はbefore_scriptを示しています。どの実装方法でも、同じコマンドが適用されます。

default:
  image: docker:24.0.5-cli
  services:
    - docker:24.0.5-dind

variables:
  DOCKER_TLS_CERTDIR: "/certs"

build:
  stage: build
  before_script:
    - mkdir -p $HOME/.docker
    - echo $DOCKER_AUTH_CONFIG > $HOME/.docker/config.json
  script:
    - docker build -t my-docker-image .
    - docker run my-docker-image /script/to/run/tests