Docker容器中的Azure CLI登录

Docker容器中的Azure CLI登录,azure,docker,dockerfile,containers,Azure,Docker,Dockerfile,Containers,我已经成功创建了在docker容器中运行的docker映像。容器成功执行映像(一个.NET应用程序),但映像在启动后不久崩溃,因为它在Azure服务中遇到错误。原因是docker容器正在尝试访问Azure服务以获取授权令牌(从密钥库获取机密),并且没有这样做的权限 我应该注意,在使用az login验证我的凭据后,可以通过Azure CLI在容器外部本地运行应用程序。然后,当通过Azure CLI启动应用程序时,“允许”它访问Azure服务以获取autho令牌,并最终从我的密钥库获取数据 想知道

我已经成功创建了在docker容器中运行的docker映像。容器成功执行映像(一个.NET应用程序),但映像在启动后不久崩溃,因为它在Azure服务中遇到错误。原因是docker容器正在尝试访问Azure服务以获取授权令牌(从密钥库获取机密),并且没有这样做的权限

我应该注意,在使用
az login
验证我的凭据后,可以通过Azure CLI在容器外部本地运行应用程序。然后,当通过Azure CLI启动应用程序时,“允许”它访问Azure服务以获取autho令牌,并最终从我的密钥库获取数据


想知道是否有办法在.NET应用程序映像执行之前在docker容器中运行带有凭据的
az login
脚本,以便在验证凭据后可以从Azure CLI(容器中)中启动应用程序。我已经浏览了文档,还没有看到类似的配置方法。

要使用Azure CLI并在容器内登录,您需要在容器内安装Azure CLI,然后使用非交互式模型登录。我推荐服务负责人。您可以查看以下命令:

az login --service-principal -u <app-url> -p <password-or-cert> --tenant <tenant>

az登录——服务主体-u。登录后,您可以根据需要启动应用程序。

以下两个选项不需要容器中的Azure CLI

  • 使用ENV变量将访问令牌注入容器
  • 使用设备身份验证流获取访问令牌

我刚才读到了这些答案。我正在寻找类似的解决方案,但使用的是服务主体。我发现Docker可以运行Kubernetes,有一个AAD Pod标识可以为我工作,但它不适用于Docker Kubernetes。我分叉了他们的Go存储库,并对麦克风组件进行了修改。现在它适用于Docker Kubernetes,不确定Azure团队是否有计划进行这些修改

您可以在此处获得有关如何运行的详细说明:


Azure CLI不适用于Docker,因为您已安装Azure CLI并登录,然后运行应用程序。

为什么不使用?@DavidNoreña我们在较旧版本的应用程序中使用了此解决方案,但需要为此安装程序维护本地配置。我们正在远离本地配置,因此必须从外部服务获取所有内容。但对于不介意本地配置的人来说,这绝对是一个有效的解决方案。谢谢您的输入。是的,您可以将服务主体和keyvault url保存为本地配置,也可以将它们作为环境变量插入。别见怪,那是个很糟糕的设计。如果您正在使用Kubernetes,使用类似的东西会更容易,但是如果您看到您接受的答案,您仍然需要处理本地配置。@DavidNoreña没有冒犯您的意思,我感谢您的反馈!最终的目标是通过Azure Devops运行这一切。一切都将注入管道(环境变量)。然而,我现在正试图弄清楚如何在我的docker容器中实际安装Azure CLI,然后使用我的注入服务原则env vars运行
az login
,然后在登录后启动我的应用程序。在线资源很少,关于通过CLI安装docker的实际文档在容器中不起作用。谢谢@CharlesXu。在安装需要运行的映像/应用程序之前,我很难找到在实际容器中安装Azure CLI的示例。你知道我能举什么例子吗?@yummylumpkins是的,你可以按照步骤来做。根据您的操作系统选择一个。