Docker-in-Dockerでレジストリを使って認証します。
Docker-in-Doッカーを使用する場合、サービスと共に新しいDockerデーモンが起動されるため、標準の認証方法は機能しません。
オプション 1: 実行docker login
before_script
で、docker
login
を実行します:
default:
image: docker:24.0.5
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"
# If you are running GitLab Runner 13.5
# or lower you can remove this
sub_path = "config.json"
オプション3DOCKER_AUTH_CONFIG
すでにDOCKER_AUTH_CONFIG
が定義されている場合、その変数を使用し、~/.docker/config.json
に保存することができます。
この認証は、いくつかの方法で定義することができます:
- ランナー設定ファイルの
pre_build_script
。 -
before_script
で。 -
script
で。
次の例はbefore_script
を示しています。どのソリューションを実装する場合でも、同じコマンドが適用されます。
default:
image: docker:24.0.5
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