我有一个Azure批处理池,节点支持Docker。也就是说,OS提供的是MicrosoftWindowsServer WindowsServer 2016-Datacenter-with-Containers。
我创建了一个任务recommended:
private static CloudTask CreateTask(string id, string commandLine)
{
var autoUserSpec = new AutoUserSpecification(elevationLevel: ElevationLevel.Admin);
var containerSettings = new TaskContainerSettings(_imageName);
var task = new CloudTask(id, commandLine)
{
UserIdentity = new UserIdentity(autoUserSpec),
ContainerSettings = containerSettings,
};
return task;
}
当任务运行时,它以错误ContainerPoolNotSupported,The compute node does not support container feature
完成。
这根本不符合逻辑。当我连接到节点时,我看到Docker在那里,图像已预先安装,所以我甚至可以立即运行容器。该任务几乎立即完成,因此Azure Batch只是注意到容器设置并出于某种原因抛出。
有没有解决方法? Google为错误名称提供了0个引用。
如果没有创建池的上下文,这个答案就不是确定的。但很可能你没有在ContainerConfiguration对象的VirtualMachineConfiguration上指定CloudPool。
有关在Azure Batch上运行容器工作负载的教程,请参阅此guide。
什么帮助完全忽视TaskContainerSettings
,即模仿一个普通的CloudTask
尚未在任务命令行中运行docker:
private static CloudTask CreateTask(string id, string commandLine)
{
var autoUserSpec = new AutoUserSpecification(elevationLevel: ElevationLevel.Admin);
var task = new CloudTask(id, $"docker run {_imageName} {commandLine}")
{
UserIdentity = new UserIdentity(autoUserSpec),
};
return task;
}
所以这确实是一种解决方法,直到容器的支持在Azure中变得更加稳定。