问题描述
我们正在将 Jenkins 设置迁移到 Azure。
拥有 Azure 节点后,我运行以下命令:
az login -i
az acr login -n myregistry
我的容器内部映射了 docker
套接字,它与主机上的 docker
交互以启动更多容器。但是当我尝试从容器内部 docker pull
时,我得到
docker: Error response from daemon: Get https://myregistry.azurecr.io/v2/myimage/manifests/mytag:
unauthorized: authentication required,visit https://aka.ms/acr/authorization for more information.
See 'docker run --help'.
解决此问题的一种方法是在我的容器中安装 az
并在启动时调用相同的登录。但是我不想修改图像。
是否有其他方法可以利用主机已获得 ACR 授权这一事实? 主机中是否有任何文件夹可以映射到我的容器中以便它使用主机的登录信息?
谢谢
解决方法
当您使用 Azure CLI 命令 az acr login
时,它会将凭证存储到您的 docker 凭证文件 ~/.docker/config.json
。这样就可以将 docker 凭证文件挂载到容器的同一路径。然后容器内的 docker 也可以使用凭证从你的 ACR 中拉取镜像。
更新:
为什么不工作,docker 将凭证存储在文件 /home/user/.docker/config.json 中。当您使用 Azure CLI 命令 az acr login
时,它将使用您用于通过命令 az login
登录的当前使用,然后存储本地 docker 服务器的凭据。这是通过我为您提供的方式的示例: