最新のgitlabと統合されたDockerレジストリを使用しています。プロジェクトごとに、個別のデプロイトークンを作成します。イメージを展開するホスト上でdocker login https://registry.example.com/project1
、デプロイトークンを入力して成功します。画像を引っ張るだけでうまくいきます。
same Host上で、同じレジストリから別のイメージを展開する必要があります。私もです docker login https://registry.example.com/project2
、デプロイトークン(各プロジェクトには独自のデプロイトークンがあるため、トークン1とは異なります)が成功します。
ただし、.docker/config.json
dockerは完全なURLではなくドメインを格納するだけなので、古い認証トークンを新しい認証トークンに置き換えます。したがって、今は画像2のみプルできますが、画像1はプルできません。
これはドッカーのバグですか?同じレジストリに複数の認証/展開トークンを使用するにはどうすればよいですか?
Dockerクライアントの -config オプションを使用して、複数の認証情報を異なるパスに保存できます。
docker --config ~/.project1 login registry.example.com -u <username> -p <deploy_token>
docker --config ~/.project2 login registry.example.com -u <username> -p <deploy_token>
次に、資格情報を選択することで、Dockerコマンドを呼び出すことができます。
docker --config ~/.project1 pull registry.example.com/project1
docker --config ~/.project2 pull registry.example.com/project2
お役に立てば幸いです。
現在、それは不可能です。 https://github.com/moby/moby/issues/37569 を参照してください。
ただし、1つの回避策は、CWDに依存するディレクトリに資格情報を格納することです。
export DOCKER_CONFIG=.docker
cd your-docker-project
docker login registry.example.com
docker-compose pull
cd ../other project
# repeat steps here
このように、ディレクトリを変更することで、資格情報を変更します。とにかくgitとdocker-composeを使用するには、cd
を実行する必要があります。
私のcompose.ymlファイルの内容:
version: '3.5'
services:
test1:
image: <mygitlabregistryurl>/project1
deploy:
replicas: 1
test2:
image: <mygitlabregistryurl>/project2
deploy:
replicas: 1
解決するには2つの方法があります。
次のコマンドでlogin
を実行できますが、CI
と一緒にサービスを更新する必要があります。
docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
プロジェクトの承認済みユーザーに対して、read_registryの権限を持つ個人アクセストークンを作成し、次のコマンドを使用できます。
docker login -u <username> -p <access_token> $CI_REGISTRY
Gitlabのドキュメントはこちら: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#authenticating-to-the-container-registry
私は同じ問題を抱えていましたが、今のところ私の回避策は専用のユーザー/トークンを使用することです:
Reporter
を使用して、必要なすべてのプロジェクトにユーザーを追加しますPersonal Access Token
スコープ付きread_registry
これで、新しく作成されたトークンを使用してログインし、プルすることができます。
docker login https://registry.example.com -u REPORTER_USER -p PERSONAL_ACCESS_TOKEN
これでうまくいくはずです。既存のユーザーでもトークンを作成できます