如何为同一个docker注册表

时间:2018-05-04 15:00:55

标签: docker gitlab

我正在使用最新的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。

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

4 个答案:

答案 0 :(得分:4)

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

@Query(value = "select * from person p where r.name = :person_name")", nativeQuery = true)
enter code here

然后您可以通过选择凭据来调用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> 

希望有帮助。

答案 1 :(得分:1)

当前不可能。参见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。

答案 2 :(得分:1)

我的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

答案 3 :(得分:0)

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

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

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

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

这应该可以解决问题,您也可以使用现有用户创建令牌