Windows Server上Bamboo CI/CD流水线Docker随机删除容器失败求助
问题描述
部署在Windows Server 2019机器上的Bamboo Server流水线,通过Docker容器构建代码并执行自动化测试,此前两年运行正常,近期无配置变更的情况下,Docker开始随机出现容器删除失败(多数失败、少数正常)。
固定报错信息:
Error waiting for container: container {CONTAINER_ID}: driver "windowsfilter" failed to remove root filesystem: failed to detach VHD: The device is not ready.: rename E:\Docker\windowsfilter{CONTAINER_ID} E:\Docker\windowsfilter{CONTAINER_ID}-removing: Access is denied.
报错后执行docker container ls -a可见容器处于Removal in progress状态,手动执行docker container rm {CONTAINER_ID}可顺利删除,且容器启动时已添加--rm参数。
已尝试的无效操作:
- 重启机器
- 重启Docker服务
- 更新Windows系统
- 清理所有容器、镜像、卷
- 重新构建镜像
- 使用进程隔离模式(
--isolation=process)运行容器 - 监控目标文件夹打开句柄(未发现进程访问)
尚未尝试禁用杀毒软件(受组织政策限制)
可能的解决方向
调整Docker服务账户的目录权限
确保Docker服务运行的默认账户NT AUTHORITY\LocalService拥有对E:\Docker\windowsfilter目录的完全控制权限:- 右键该文件夹 → 属性 → 安全 → 编辑 → 添加
NT AUTHORITY\LocalService账户 - 勾选“完全控制”权限,应用保存后重启Docker服务
- 右键该文件夹 → 属性 → 安全 → 编辑 → 添加
延长VHD卸载超时时间
编辑Docker配置文件C:\ProgramData\Docker\config\daemon.json,添加存储超时参数,延长VHD detach的等待时间:{ "storage-opts": [ "windowsfilter.timeout=300" ] }修改后重启Docker服务,超时时间可根据实际情况调整(单位:秒)
检查虚拟磁盘服务状态
确认Windows系统的Virtual Disk服务正常运行:- 打开服务管理器(
services.msc) - 找到
Virtual Disk服务,设置启动类型为“自动”,确保状态为“正在运行”
- 打开服务管理器(
流水线添加重试逻辑
利用手动删除有效的特性,在Bamboo流水线的容器清理步骤后添加重试机制:- 执行强制删除命令
docker container rm -f {CONTAINER_ID},设置2-3次重试,每次间隔10秒 - 可配合
docker container inspect {CONTAINER_ID}判断容器是否仍存在,决定是否重试
- 执行强制删除命令
内容的提问来源于stack exchange,提问作者cecia234

