Docker启动失败问题排查(一)

简介: 新公司切换至Windows环境后,Docker频繁启动失败,表现为引擎停止且图标无限加载。通过日志排查发现,问题源于Windows复杂网络配置导致Docker判断异常。最终通过分析`host`与`vm`目录下核心日志,定位并解决了网络服务初始化冲突问题。

换了一家公司,新公司的网络环境只支持Windows,于是从Mac切换到了Windows。由此遇到了很多很多的问题,在此记录一些比较典型的问题。

问题背景

每一次重启电脑,Docker重新打开时,都会失败,具体表现为Docker界面显示Docker Engine stopped,右下角Docker的小图标则显示为一个鲸鱼不停的跳动,为加载状态,此时如果点击退出也会卡住,只能通过任务管理器的形式杀掉Docker进程。在第一次杀掉Docker进程后,后续启动都能成功。

Docker启动失败问题排查- Docker启动失败2.png

由于比较忙的原因,每次我都是直接杀掉Docker进程再重新启动,以此来快速解决这个问题。偶然的情况下,我发现在【网络和Intel设置 - 高级设置】菜单中,禁用当前网卡再重启,Docker也随之完成了启动,即使当前界面显示的是Docker is stopped

由此,初步判断,问题原因应该是Windows下有线网/无线网/WSL/Hyper-V等杂乱的网络配置导致Docker的网络判断逻辑失败。

最近有了一些空闲,准备腾出手好好解决这个问题。

解决方案

遇到软件问题,首先要想办法排查日志的问题。

查看Docker日志

Docker日志的路径在C:\Users\你的用户名\AppData\Local\Docker\log路径下,可以在PowerShell中使用命令code $Env:LOCALAPPDATA\Docker\log使用vscode快速打开log文件夹。

可以在文件夹中看到很多的日志文件,我将它们大体整理了一下(整理过程可见附录),得到的结果如下:

各目录的主要作用:

目录 作用说明
host Windows 主机侧组件的日志。主要记录Docker Desktop 应用程序自身(Electron UI、后台守护进程、代理进程、VPNKit、扩展框架等)的运行情况。
vm LinuxKit VM / WSL2 内部日志。相当于 Docker Desktop 启动的轻量 Linux 虚拟机,里面跑的就是dockerd、containerd、网络、DNS、时间同步等核心服务。如果 Docker Daemon 没起来,关键日志在这里。
host\electron-crash-reports Docker Desktop的UI层使用了electron框架,这个文件夹中就存放electron框架错误日志。

host目录下各日志文件的作用:

文件名 作用
.327f22648f3979bb4480e4e0a1189d37a8110fb3-audit.json 审计事件记录,用于追溯设置变更或关键操作。
com.docker.admin.exe.log 记录与 Docker Desktop 管理员权限相关的操作。
com.docker.backend.exe.log 核心后端服务日志,负责协调虚拟机、WSL、文件共享和网络等。这是首次启动失败或核心功能异常时首要的排查文件。
com.docker.build.exe.stdout.log / stderr.log 记录镜像构建过程中的标准输出和错误输出。在镜像构建失败或卡住时应查看。
com.docker.dev-envs.exe.stdout.log / stderr.log 记录 Docker 开发环境(Dev Environments)功能的标准输出和错误输出。在创建或同步开发环境时遇到问题可查看。
com.docker.diagnose.exe.log 诊断工具日志,用于记录在运行 Troubleshoot 或打包诊断包时的自检结果和问题。
com.docker.extensions.exe.log / stdout.log / stderr.log 记录 Docker 扩展框架的日志,包括标准输出和错误输出。扩展安装或运行失败时需检查。
com.docker.proxy.exe.log / stdout.log / stderr.log 主机与虚拟机/WSL 之间的网络代理进程日志,处理 API 和端口转发。网络不通或守护进程通信失败时,这些文件提供重要线索。
com.docker.wsl-distro-proxy.exe.log 记录与 WSL 发行版通信的代理日志。WSL 启动缓慢或出现异常时,可在此处找到线索。
Docker Desktop.exe.stdout.log / stderr.log Docker Desktop GUI 主程序的标准输出和错误输出。若界面白屏、无法打开或交互异常,可查看。
docker.exe.stdout.log / stderr.log 记录 Docker 命令行工具(CLI)的标准输出和错误输出。
electron-*.log 记录基于 Electron 框架的 GUI 界面运行日志,按时间滚动。用于排查界面崩溃、渲染异常或与后端通信失败的问题。
httpproxy.log 记录内置 HTTP 代理的日志。若扩展市场加载失败或内置 API 调用超时,可在此处查看。
ipc.stacks.log 记录进程间通信(IPC)的堆栈快照,通常在检测到死锁或阻塞时生成。可用于排查应用卡死的问题。
monitor.log 记录后台健康监控和“看门狗”服务日志。若核心组件反复崩溃并重启,此处会记录重启的原因和次数。
vpnkit-bridge.exe.log / stdout.log / stderr.log 记录 VPNKit 网络桥的日志,负责容器的 NAT、DNS 和端口映射。当容器网络出现问题时,这是主要排查文件。

vm目录下各文件的作用:

文件名 作用
01-docker.log* 记录 Docker 服务在 VM 启动初期的运行情况(init 阶段的 docker 日志)。
acpid*.log ACPI 电源管理相关日志,记录关机、休眠、设备电源事件。
allowlist.log 管理和校验 VM 内允许的组件或访问规则。
artifactory.out.log 与内部仓库/依赖缓存相关的服务日志。
binfmt*.log Linux binfmt_misc 机制日志,用于在 VM 内运行多架构镜像。
container-filesystem*.log 容器文件系统的挂载、检测与错误记录。
containerd*.log Containerd 守护进程日志,管理容器生命周期。
devenv-service*.log 开发环境辅助服务日志,相关功能启动/停止记录。
devenv.log 开发环境相关操作记录。
diagnosticsd*.log Docker Desktop 的诊断服务日志。
dns-forwarder*.log VM 内 DNS 转发服务日志。
dns.log DNS 解析结果和错误日志。
docker*.log Docker 守护进程核心日志,记录容器与镜像管理。
dockerd.log Dockerd 守护进程单独日志,容器运行核心进程。
http-proxy.log VM 内 HTTP 代理服务日志,常用于拉取镜像时的代理转发。
init.log VM 初始化过程日志。
kmsg*.log Linux 内核消息缓冲区日志,系统级事件(驱动、内核警告)。
memlogd.log 内存日志管理,可能是轻量级日志收集服务。
nat*.log VM 内 NAT 网络转发日志。
nfs-common*.log NFS 文件共享相关日志。
onboot.*.log VM 启动阶段的初始化任务日志,涵盖 sysctl、元数据、服务启动、网络配置等。
procd*.log 进程管理服务日志,类似 init/systemd。
rpcbind*.log RPC 端口映射服务日志,文件共享和远程调用相关。
sntpc*.log SNTP 时间同步日志。
socks*.log SOCKS5 代理日志。
stargz-snapshotter.log stargz 快速镜像分层加载器日志。
syn-filter.log TCP SYN 过滤日志,网络安全相关。
trim-after-delete.log 磁盘空间回收(TRIM 操作)相关日志。
volume-contents*.log 容器卷挂载内容的检查与日志。
vpnkit-forwarder.log VPNKit 网络转发服务日志。
vpnkit-tap-vsockd.log VPNKit TAP/VSock 守护进程日志,处理 VM 与宿主机之间的网络通信。
目录
相关文章
|
20天前
|
人工智能 开发框架 自然语言处理
智能体来了!智能体教育新纪元:从黎跃春的智能体开发实训,看AI人才培养的未来路径
智能体时代来临,AI教育迈向“系统智能”新阶段。从零基础入门到项目实训,再到产教融合,培养具备AI思维与实战能力的创新型人才,推动教育与产业双向奔赴。
|
8天前
|
存储 数据可视化 项目管理
Arya - 功能强大的在线 Markdown 编辑器
Arya(二丫)是一款基于Vue2与Vditor的开源在线Markdown编辑器,集流程图、甘特图、Echarts、PPT预览、五线谱等丰富功能于一体,支持多种编辑模式与一键导出PDF/图片,完美适配公众号等内容平台,3.3k+ GitHub stars,部署简单,体验优雅。
225 14
Arya - 功能强大的在线 Markdown 编辑器
|
5天前
|
开发工具 图形学 Android开发
《Unity游戏多平台上架零驳回:应用商店适配核心技巧与避坑指南》
本文聚焦Unity游戏多平台上架的核心适配技巧与避坑要点,深入拆解主流应用商店的审核逻辑与技术要求。文章从平台规则差异、Unity技术适配、合规性把控、包体构建细节、审核驳回应对等维度,结合实战经验剖析上架关键环节:强调需穿透商店规则表象,适配不同平台的生态定位与硬件特性,解决引擎与设备的兼容性问题;重点关注隐私政策、支付合规、内容安全等合规红线,同时把控包体格式、签名、渠道标识等流程细节。针对审核驳回,提供精准排查、根源整改与专业申诉的实操思路,助力开发者避开隐形陷阱,实现多平台零驳回顺畅上架,为Unity游戏上架提供兼具深度与实用性的技术指引。
90 10
|
8天前
|
Java Nacos Sentinel
Spring Cloud Alibaba 深度实战:Nacos + Sentinel + Gateway 整合指南
本指南深入整合Spring Cloud Alibaba核心组件:Nacos实现服务注册与配置管理,Sentinel提供流量控制与熔断降级,Gateway构建统一API网关。涵盖环境搭建、动态配置、服务调用与监控,助你打造高可用微服务架构。(238字)
375 10
|
6天前
|
人工智能 前端开发 UED
PPT大纲生成的AI魔法:3小时工作3分钟搞定,但重点不是效率
本文从反常识角度切入,通过三个场景案例,阐述AI大纲生成工具的真正价值不在于效率提升,而在于帮助使用者建立结构化思维模式。文章提供完整的AI指令和系统的使用进阶指南。
139 9
PPT大纲生成的AI魔法:3小时工作3分钟搞定,但重点不是效率
|
8天前
|
消息中间件 缓存 NoSQL
Redis + Java 架构实战:从锁机制到消息队列的整合
本文深入解析Redis与Java的整合实践,涵盖分布式锁、消息队列、缓存策略、高性能数据结构及容错机制。结合电商场景,助力构建高并发、高可用的分布式系统。
72 8
|
14天前
|
数据采集 监控 数据可视化
Python因果分析选哪个?六个贝叶斯推断库实测对比(含代码示例)
本文对比了Python中六大常用因果推断库:Bnlearn、Pgmpy、CausalNex、DoWhy、PyAgrum和CausalImpact,涵盖贝叶斯网络建模、因果结构学习与效应评估。基于Census Income数据集,分析各库在因果发现、可解释性与工程实践中的优劣,助你根据项目需求选择合适工具。
237 6
Python因果分析选哪个?六个贝叶斯推断库实测对比(含代码示例)
|
5天前
|
人工智能 安全 算法
数据共享又怕泄露?聊聊隐私计算:让数据“可用不可见”的绝活儿
数据共享又怕泄露?聊聊隐私计算:让数据“可用不可见”的绝活儿
83 15