代码之家  ›  专栏  ›  技术社区  ›  gucki

如何对同一docker注册表使用多个身份验证/登录

  •  33
  • gucki  · 技术社区  · 8 年前

    我正在使用最新的gitlab和集成的docker注册表。我为每个项目创建一个单独的部署令牌。在要部署映像的主机上 docker login https://registry.example.com/project1 ,输入部署令牌并获得成功。拖动图像效果很好。

    在 相同的 主机我需要从同一注册表部署另一个映像。我也是 docker login https://registry.example.com/project2 ,部署令牌(与令牌1不同,因为每个项目都有自己的部署令牌)并获得成功。

    然而 .docker/config.json 我可以看到docker只存储域,而不是完整的url,因此用新的身份验证令牌替换旧的身份验证令牌。所以我现在只能拉图像2,但不能再拉图像1了。

    这是docker的bug吗?如何对同一注册表使用多个身份验证/部署令牌?

    4 回复  |  直到 8 年前
        1
  •  55
  •   segalaj    7 年前

    您可以使用 --config Docker客户端将多个凭据存储到不同路径的选项:

    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
    

    希望这有帮助。

        2
  •  10
  •   Fishdrowned Yajo    6 年前

    目前这是不可能的。看见 https://github.com/moby/moby/issues/37569 。

    但是,有一个 解决方法 ,以防为您服务,是将凭据存储在依赖CWD的目录中:

    export DOCKER_CONFIG=.docker
    cd your-docker-project
    docker login registry.example.com
    docker-compose pull
    
    cd ../other project
    # repeat steps here
    

    这样,通过更改目录,您可以更改凭据。你必须 cd 无论如何,使用git和docker编写。

        3
  •  5
  •   JPelletier    7 年前

    我也有同样的问题,目前我的解决方法是使用专用用户/令牌:

    1. 创建新用户
    2. 使用角色将用户添加到所需的所有项目中 Reporter
    3. 新建 Personal Access Token 具有范围 read_registry

    现在,您可以使用新创建的令牌登录并拉取:

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

    这应该可以做到,您也可以使用现有用户创建令牌

        4
  •  2
  •   onder    7 年前

    我写作的内容。yml文件:

    version: '3.5'
    services:
    
        test1:
            image: <mygitlabregistryurl>/project1
            deploy:
                replicas: 1
    
        test2:
            image: <mygitlabregistryurl>/project2
            deploy:
                replicas: 1     
    

    有两种解决方法。

    • 你可以 login 使用以下命令,但您必须同时使用 CI 。

      docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
      
    • 对于项目中的授权用户,您可以创建具有read\u 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

    推荐文章