我正在使用最新的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令牌?
答案 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)
我遇到了同样的问题,目前的解决方法是使用专用的用户/令牌:
Reporter
将用户添加到您需要的所有项目中Personal Access Token
创建一个新的read_registry
您现在可以使用新创建的令牌登录并提取:
docker login https://registry.example.com -u REPORTER_USER -p PERSONAL_ACCESS_TOKEN
这应该可以解决问题,您也可以使用现有用户创建令牌