web-dev-qa-db-ja.com

同じDockerレジストリに複数の認証/ログインを使用する方法

最新の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はプルできません。

これはドッカーのバグですか?同じレジストリに複数の認証/展開トークンを使用するにはどうすればよいですか?

13
gucki

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

お役に立てば幸いです。

11
segalaj

現在、それは不可能です。 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を実行する必要があります。

3
Yajo

私の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

1
onder

私は同じ問題を抱えていましたが、今のところ私の回避策は専用のユーザー/トークンを使用することです:

  1. 新しいユーザーを作成する
  2. ロールReporterを使用して、必要なすべてのプロジェクトにユーザーを追加します
  3. 新しいを作成します Personal Access Tokenスコープ付きread_registry

これで、新しく作成されたトークンを使用してログインし、プルすることができます。

docker login https://registry.example.com -u REPORTER_USER -p PERSONAL_ACCESS_TOKEN

これでうまくいくはずです。既存のユーザーでもトークンを作成できます

0
JPelletier