如何使用C#启动以前停止的Azure容器实例?

时间:2018-12-09 11:00:48

标签: c# azure azure-container-service

我有以下代码来停止Azure容器实例,并希望使用类似的代码来启动它。

using Microsoft.Azure.Management.Compute.Fluent.Models;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent.Core;

 var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal("XXXX",                "XXXX", "XXXX", AzureEnvironment.AzureGlobalCloud);

        var azure = Azure
            .Configure()
            .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
            .Authenticate(credentials)
            .WithSubscription("XXXXX");

        var containerName = "mycontainer";
        var containerGroup = azure.ContainerGroups.GetByResourceGroup("myResourceGroup", containerName);
        if (containerGroup.State == "Running")
        {
            containerGroup.Stop();
        }

我想做同样的事情并启动我的azure容器实例。那么containerGroup.Start()在哪里? ?界面中似乎不存在此文件。我已经尝试使用containerGroup.Restart();但这在停止状态下不起作用。我需要能够从C#代码中执行此操作,并且在可能的情况下希望避免使用powershell。

2 个答案:

答案 0 :(得分:1)

不幸的是,当您停止容器实例时,它们将处于“已终止”状态,您无法再次启动它们。

  

已终止或已删除的容器组无法更新。一旦   容器组已停止(处于“已终止”状态)或已   删除后,该组将被部署为新组。

即使您更新了ACI,也意味着将重新部署ACI。您可以查看Update containers in Azure Container Instances。此外,当容器实例处于运行状态时,“重新启动”操作也将起作用。

因此,至少在现在,C#SDK中没有为您提供启动功能。希望对您有帮助。

更新

看看事件:

enter image description here

每次停止后启动容器组时,容器组始终执行以下步骤:拉出映像->创建容器组->启动容器实例。很明显,停止后启动容器组时,容器组已重新创建。

答案 1 :(得分:0)

有一种方法可以做到这一点,但它不会在流畅的API中公开:

using Microsoft.Azure.Management.ContainerInstance.Fluent;

// azure is an instance of IAzure; the fluent Azure API
var resources = await azure.ContainerGroups.ListAsync();

foreach(var containerGroup in resources.Where(aci => aci.State != "Running"))
{
  await ContainerGroupsOperationsExtensions.StartAsync(
           containerGroup.Manager.Inner.ContainerGroups,
           containerGroup.ResourceGroupName, 
           containerGroup.Name);
}

正如其他人所提到的,您确实需要意识到这实际上是在启动一个新的容器。除非您在mounted volume之类的其他地方坚持使用该状态,否则上次运行将不会保持任何状态。

您还需要向执行此代码的人授予适当的权利。我正在使用一个函数,因此我必须设置一个服务帐户和一个角色,此blog post具有所有详细信息。

更新 我正在使用的代码在GitHub上:https://github.com/alanta/azure_scheduler/blob/master/src/StartACIs.cs