微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure 容器实例 - .net sdk - 更改环境变量并重新启动任务容器

如何解决Azure 容器实例 - .net sdk - 更改环境变量并重新启动任务容器

我部署了一个容器组,其中只有一个容器,重启策略为从不。我想再次运行这个容器,但使用不同的环境变量。我在 powershell 和 azure cmdlet 中看到了执行此操作的方法,但 Azure .net SDK 并不太清楚如何实现。

有没有人有任何关于如何使用 Fluent API 实现这一点的指示?这对我很有用,因为不需要再次拉取图像,只需重新启动容器实例即可。

解决方法

当你想再次运行这个容器时,意味着你需要更新这个容器组的配置,即使你只想改变环境变量。获取有关 Update containers 的更多详细信息。对于 Azure 容器实例,更新意味着再次创建。对于.NET,您可以使用IWithEnvironmentVariables中的Microsoft.Azure.Management.ContainerInstance.Fluent.ContainerGroup.Definition来设置环境变量,然后再次创建容器组。

,

我不确定您是否能够防止在容器启动时再次拉取镜像。我经常看到 ACI 在重新启动时再次拉入映像,无论之前是否拉取了完全相同的映像。我想这就是无服务器的真正含义;)

从您的问题来看,并不完全清楚您要实现的目标以及使用环境变量重新启动容器是否是实现此目的的最佳方法。

所以在不知道具体情况的情况下,这里有一些想法:

如果您偶尔运行容器并且只想给它一些说明,您可以考虑从参数化的 ARM 模板重新部署容器。绝对可以通过ARM模板传入环境变量。

您可以将 Azure 存储帐户中的文件共享装载到容器中,然后运行从那里加载变量的脚本。您将要处理的数据上传到文件共享并启动容器。

我使用它在通用容器中运行任意 (.NET) 可执行文件,例如用于测试目的。

对于更频繁的运行,您可以将配置数据保存在数据库、队列或 blob 中,然后从容器中处理这些数据。 Blob 和队列可以很容易地绑定到 Azure Functions,这样你就可以拥有一个函数,当有工作要处理时,它会自动启动你的容器。

从你的问题来看,虽然我有点猜测你正在寻找一些 .NET 代码来实现这一点。管理 SDK 中似乎对此提供了一些支持,但到目前为止我一直无法让它发挥作用:

using System.Threading.Tasks;
using Microsoft.Azure.Management.ContainerInstance.Fluent;
using Microsoft.Azure.Management.ContainerInstance.Fluent.Models;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent;

// ...

public static async Task SetEnvAndStart(string varName,string customValue)
{
    // connect to Azure
    var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(
        Configuration.ClientId(),Configuration.ClientSecret(),Configuration.TenantId(),AzureEnvironment.AzureGlobalCloud);            

    var azure = await Azure.Authenticate(credentials).WithDefaultSubscriptionAsync();
    // Find your container group
    var containerGroup = await azure.ContainerGroups.GetByIdAsync("<resource id>");
    // Add the environment variable
    containerGroup.Containers["mycontainer"].EnvironmentVariables.Add(new EnvironmentVariable(varName,customValue));
    // Apply the changes
    await containerGroup.Update().ApplyAsync();
    // Restart the container
    await ContainerGroupsOperationsExtensions.StartAsync(containerGroup.Manager.Inner.ContainerGroups,containerGroup.ResourceGroupName,containerGroup.Name);
}

如果您真的想使用环境变量,我认为最好的办法是重新创建容器。您可能会发现 some of the example code 对 Azure 管理 SDK 很有帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?