You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows2019中CustomScriptExtension部署脚本失败问题排查

问题分析

从日志和现象来看,核心问题出在以下两点:

  1. 计划任务注册失败:微软官方的install-docker-ce.ps1脚本在启用Windows Containers功能后,会尝试创建一个计划任务用于重启后自动完成Docker安装。但CustomScriptExtension默认以Local System账户执行,该账户无法创建关联普通用户的计划任务,触发错误No mapping between account names and security IDs was done(错误代码0x80070534),导致后续安装步骤中断。
  2. 重启后无后续执行:虽然脚本触发了VM重启,但因为计划任务创建失败,重启后没有自动继续执行Docker引擎的下载和安装流程,最终导致Docker未完成部署。
解决方案

根据你的私有镜像限制,提供以下几种可行方案:

方案1:拆分扩展,分阶段执行(推荐)

将Docker安装拆分为两个独立的CustomScriptExtension,先启用Containers功能并重启VM,再完成Docker安装:

第一步:启用Containers功能并重启VM

resource "azurerm_virtual_machine_extension" "enable-containers" {
  for_each = local.XXXXXX

  name                = "${each.key}-enable-containers"
  virtual_machine_id  = module.XXXXXXXX[each.key].virtual_machine_id
  publisher           = "Microsoft.Compute"
  type                = "CustomScriptExtension"
  type_handler_version = "1.10"

  settings = <<SETTINGS
  {
    "commandToExecute" : "powershell -ExecutionPolicy Unrestricted -Command 'Install-WindowsFeature Containers; Restart-Computer -Force'"
  }
  SETTINGS
}

第二步:重启后安装Docker

依赖第一个扩展完成后,执行脚本完成Docker安装(使用-SkipRestart参数跳过内置的重启和计划任务逻辑):

resource "azurerm_virtual_machine_extension" "install-docker" {
  for_each = local.XXXXXX

  name                = "${each.key}-install-docker"
  virtual_machine_id  = module.XXXXXXXX[each.key].virtual_machine_id
  publisher           = "Microsoft.Compute"
  type                = "CustomScriptExtension"
  type_handler_version = "1.10"

  depends_on = [azurerm_virtual_machine_extension.enable-containers]

  settings = <<SETTINGS
  {
    "commandToExecute" : "powershell -ExecutionPolicy Unrestricted -File install-docker-ce.ps1 -SkipRestart",
    "fileUris" : ["https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1"]
  }
  SETTINGS
}

方案2:修改官方脚本,适配Local System账户

下载官方的install-docker-ce.ps1脚本,修改计划任务注册逻辑,指定使用Local System账户创建任务:

  1. 找到脚本中Register-ScheduledTask的代码行(约第150行),修改为:
Register-ScheduledTask -TaskName $global:BootstrapTask -Action $action -Trigger $trigger -RunLevel Highest -User "NT AUTHORITY\SYSTEM" -Force
  1. 将修改后的脚本上传到你的私有存储(如Azure存储账户,生成SAS URL确保VM可访问)
  2. 在Terraform中引用私有存储的脚本URL:
resource "azurerm_virtual_machine_extension" "bootstrap-scripts" {
  for_each = local.XXXXXX

  name                = "${each.key}-bootstrap"
  virtual_machine_id  = module.XXXXXXXX[each.key].virtual_machine_id
  publisher           = "Microsoft.Compute"
  type                = "CustomScriptExtension"
  type_handler_version = "1.10"

  settings = <<SETTINGS
  {
    "commandToExecute" : "powershell -ExecutionPolicy Unrestricted -File install-docker-ce.ps1",
    "fileUris" : ["<你的私有存储脚本SAS URL>"]
  }
  SETTINGS
}

方案3:手动补全安装(临时排查用)

如果需要快速验证,可RDP登录VM后手动执行以下步骤:

  1. 确认Containers功能已启用:Get-WindowsFeature Containers
  2. 直接执行脚本的安装逻辑:powershell -ExecutionPolicy Unrestricted -File C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads\0\install-docker-ce.ps1 -SkipRestart
验证步骤

部署完成后,通过以下方式确认Docker安装成功:

  • RDP登录VM,执行docker info查看引擎状态
  • 检查服务状态:Get-Service Docker

内容的提问来源于stack exchange,提问作者PsyberMind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:40:32