登录到主机上的 ACR,我可以在容器内使用它吗?

问题描述

我们正在将 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 服务器的凭据。这是通过我为您提供的方式的示例:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...