为何Datacenter-Core-1709-with-Containers-smalldisk中服务已停但dockerd仍运行
解决Azure VMSS(Datacenter-Core-1709-with-Containers-smalldisk镜像)Docker EE预览版升级异常问题
我碰到过不少类似的Azure VMSS上Docker升级的场景,结合你的描述,这个问题的核心是镜像自带的dockerd进程是通过非服务方式启动的,和注册的Windows服务冲突,导致升级受阻。下面是一步步的解决方法:
一、处理当前异常状态,完成升级
- 首先终止正在运行的dockerd进程(因为它不是通过服务启动的,所以
Stop-Service命令无效):Stop-Process -Name dockerd -Force - 确认dockerd服务处于停止状态:
Get-Service dockerd - 执行Docker EE预览版的升级操作,示例命令如下(请替换
<预览版版本号>为实际需要的版本):# 安装Docker提供器模块 Install-Module DockerProvider -Force # 安装指定预览版的Docker EE Install-Package Docker -ProviderName DockerProvider -RequiredVersion <预览版版本号> -Force - 配置并启动dockerd服务:
# 设置服务为开机自动启动 Set-Service dockerd -StartupType Automatic # 启动dockerd服务 Start-Service dockerd
二、解决重启后可能的重复异常
你提到重启后可能出现问题,这是因为这个特定的Azure镜像在系统初始化时,大概率通过启动脚本、任务计划或者注册表启动项手动启动了dockerd,而非依赖Windows服务。要彻底解决这个问题:
- 检查启动文件夹:查看
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp目录下是否有自动启动dockerd的脚本,如有直接删除 - 检查任务计划:打开任务计划程序,查找是否有触发dockerd启动的任务,禁用或删除该任务
- 检查注册表:打开注册表编辑器,定位到
HKLM\Software\Microsoft\Windows\CurrentVersion\Run路径,查看是否有dockerd相关的启动项,删除对应条目
问题根源说明
这个Datacenter-Core-1709-with-Containers-smalldisk镜像在部署时,为了快速初始化容器环境,可能通过脚本直接启动了dockerd进程,同时又注册了Windows服务但未启动它。这就导致了Get-Service显示服务未运行,但Get-Process能看到dockerd进程的矛盾状态——升级时因为进程占用无法替换文件,必须先终止这个手动启动的进程才能完成升级。
内容的提问来源于stack exchange,提问作者Poul K. Sørensen
相关产品推荐
相关产品推荐

