首页 文章

如何为同一个docker注册表使用多个auths / logins

提问于
浏览
1

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

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

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

这是码头 Worker 的错误吗?如何为同一个注册表使用多个auth / deploy令牌?

3 回答

  • 0

    这不是docker中的错误,也不是gitlab中的错误 . 事实上,gitlab为每个项目创建了一个注册表,使得处理有点麻烦 .

    如果这是一个帮助,您可以在登录时在命令行界面上提供令牌 .

    docker login registry.example.com -u <username> -p <deploy_token>
    

    请参阅此处的官方文档:https://docs.gitlab.com/ee/user/project/deploy_tokens/#read-container-registry-images

  • 0

    目前,这是不可能的 . 见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-compose .

  • 0

    我的compose.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_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

相关问题