docker - 如何修复由于 hns 错误而无法重新启动的 docker 守护进程
问题描述
- 适用于 Windows 服务器的 Docker
- Windows Server 版本 1709,带有容器
- Docker 版本 17.06.2-ee-6,构建 e75fdb8
- Swarm 模式(工作节点,具有 ubuntu master 的 swarm 的一部分)
在连接到覆盖网络的容器开始间歇性地丢失其网络适配器后,我重新启动了机器。现在守护程序不会启动。下面是运行 docker -D 的最后几行输出。
请让我知道如何解决这个问题。
time="2018-05-15T15:10:06.731160000Z" level=debug msg="Option Experimental: false"
time="2018-05-15T15:10:06.731160000Z" level=debug msg="Option DefaultDriver: nat"
time="2018-05-15T15:10:06.731160000Z" level=debug msg="Option DefaultNetwork: nat"
time="2018-05-15T15:10:06.734183700Z" level=info msg="Restoring existing overlay networks from HNS into docker"
time="2018-05-15T15:10:06.735174400Z" level=debug msg="[GET]=>[/networks/] Request : "
time="2018-05-15T15:12:06.789120400Z" level=debug msg="Network (d4d37ce) restored"
time="2018-05-15T15:12:06.796122200Z" level=debug msg="Endpoint (4114b6e) restored to network (d4d37ce)"
time="2018-05-15T15:12:06.796122200Z" level=debug msg="Endpoint (819eb70) restored to network (d4d37ce)"
time="2018-05-15T15:12:06.797124900Z" level=debug msg="Endpoint (ade55ea) restored to network (d4d37ce)"
time="2018-05-15T15:12:06.798125600Z" level=debug msg="Endpoint (d0054fc) restored to network (d4d37ce)"
time="2018-05-15T15:12:06.798125600Z" level=debug msg="Endpoint (e2af8d8) restored to network (d4d37ce)"
time="2018-05-15T15:12:06.854118500Z" level=debug msg="[GET]=>[/networks/] Request : "
time="2018-05-15T15:14:06.860654000Z" level=debug msg="start clean shutdown of all containers with a 15 seconds timeout..."
Error starting daemon: Error initializing network controller: hnsCall failed in Win32: Server execution failed (0x80080005)
解决方案
这是使用 swarm 主机完全重建所有 docker 问题的完整步骤。有时只有一些步骤就足够了(特别是 hns 部分),因此您可以先尝试这些步骤。
Remove all docker services and user-defined networks (so all docker networks except `nat` and `none`
Leave the swarm cluster (docker swarm leave --force)
Stop the docker service (PS C:\> stop-service docker)
Stop the HNS service (PS C:\> stop-service hns)
In regedit, delete all of the registry keys under these paths:
HKLM:\SYSTEM\CurrentControlSet\Services\vmsmp\parameters\SwitchList
HKLM:\SYSTEM\CurrentControlSet\Services\vmsmp\parameters\NicList
Now go to Device Manager, and disable then remove all network adapters that are “Hyper-V Virtual Ethernet…” adapters
Now rename your HNS.data file (the goal is to effectively “delete” it by renaming it):
C:\ProgramData\Microsoft\Windows\HNS\HNS.data
Also rename C:\ProgramData\docker folder (the goal is to effectively “delete” it by renaming it)
C:\ProgramData\docker
Now reboot your machine
推荐阅读
- version-control - Oracle SQLcl 顶点导出“-split”选项
- python - 如何在特定间隔下绘制符号函数
- terraform - Terraform Data Fusion 实例更改导致计划期间发生错误
- azure-devops - 可以在 DevOps 中创建看板来显示来自两个不同项目的工作项吗?
- css - 无法在css中加载背景图像
- java - 无法使用唯一键从 Firebase 检索用户位置数据
- jenkins - 詹金斯管道 - 这个功能来自哪里
- mysql - SQL:将列值链接到列名以满足某些条件
- apache-kafka - KafkaConsumer 未能“重新订阅”
- python - 在尚未开始计算的情况下持续存在内存延迟