Windows 版 Docker 在更新到 2.1.1.0 Edge (或 Stable) 后卡在 "Kubernetes is Starting"。

59

我最近将我的Windows 10电脑上的Docker for Desktop更新到最新的Edge通道版本:2.1.1.0。不幸的是,更新后,Kubernetes无法工作,一直卡在“Kubernetes正在启动”的状态。

我已经尝试了以下方法:

  • 重新启动Docker
  • 重置Kubernetes集群
  • 恢复出厂设置
  • 重新启动机器
  • 卸载并重新安装Docker

但是似乎没有起作用。有什么方法可以解决这个问题吗?


GitHub上的docker/for-mac项目可能是一般支持请求的更好选择。 - David Maze
12个回答

102

经过几个小时的尝试,以下是最终帮助我解决问题的步骤:

  1. 将 Docker 恢复到出厂设置并退出 Docker Desktop

  2. 删除文件夹 C:\ProgramData\DockerDesktop\pki(在备份文件夹后进行删除)。请注意,许多人报告该文件夹位于其他位置:C:\Users\<user_name>\AppData\Local\Docker\pki

  3. 删除文件夹 ~\.kube\(同样要备份以确保安全)

  4. 重新启动 Docker,打开 Docker 设置,进行必要的配置更改(添加代理、设置资源限制等),启用 Kubernetes 并让它启动

  5. 等待一段时间,现在 Docker 和 Kubernetes 都应该已经启动了。

当您尝试使用 kubectl 连接到 Kubernetes 时,可能会遇到另一个问题,例如

Unable to connect to the server: x509: certificate signed by unknown authority

你可以通过以下步骤解决这个问题:

  1. 在文本编辑器中打开 ~.kube\config 文件
  2. https://kubernetes.docker.internal:6443 替换为 https://localhost:6443
  3. 再次尝试连接。

如果你使用的是(企业)代理,在 NO_PROXY 中添加 kubernetes.docker.internal (例如: export NO_PROXY=kubernetes.docker.internal),前提是代理已经正确配置了。

如果上述步骤仍然不能解决问题,请查看 C:\ProgramData\DockerDesktop\log\ 日志文件以进一步排除故障。


~.kube\ 究竟在哪里?我找不到这样的目录。 - James
2
这是Linux术语,指的是您的主目录(通常为:C:\users<your user name>)。在Linux中,波浪号字符是指向您主目录的快捷方式。Irshad P I可能正在Windows上使用Linux shell,这就是他/她回答那样的原因。 - peterfelts
我在Windows 10 (1909)上遇到了类似的问题(Docker 2.0.0.3 (31259)),但是通过以下步骤成功地运行了Kubernetes。 - peterfelts
4
我的日志位于:C:\Users<USER>\AppData\Local\Docker\log.txt。 - kaiser
4
我已按照此答案的建议进行操作,但并未解决我的问题。 显然,它在错误的位置搜索 .kube\config 文件。 因此,我添加了一个名为 KUBECONFIG 的环境变量,其值为 "C:\Users<your user name>.kube\config"。 然后,在 Docker 应用程序的工具栏图标中,我选择了退出 Docker Desktop,然后通过exe手动启动它。 Kubernetes随后开始运行,并改为绿色状态。 通过运行 "kubectl config current-context",我现在可以看到 docker-desktop 上下文。 我希望这对某人有所帮助。 - Sonia
显示剩余5条评论

34

我建议您检查您的 etc/hosts 文件是否拥有以下行。

127.0.0.1       docker-for-desktop
127.0.0.1       kubernetes.docker.internal

由于 Docker 无法解析您的本地主机名并停留在该状态。

您是否在公司代理后面?如果是,请尝试切换您的代理或尝试在第一次启动 K8 时绕过它。我遇到了同样的问题,实际上这解决了我的问题而不是升级或降级。


1
非常感谢。由于某种原因,我的hosts文件被覆盖了,而这个答案正是我需要的确切解决方案。 - Manish Sapariya
1
Antivir正在阻止hosts文件中的更改。这解决了我的问题。 - kaiser
1
我刚刚在etc/hosts中添加了kubernetes.docker.internal,然后它就起作用了。 - Baga
2
很奇怪Docker Desktop将host.docker.internal、gateway.docker.internal和kubernetes.docker.internal添加到HOSTS中,但没有添加docker-for-desktop。这是我成功安装和启动Kubernetes的关键所在。 - AlwaysLearning
4
太棒了!只需添加 "127.0.0.1 docker-for-desktop"("127.0.0.1 kubernetes.docker.internal 已经存在"),就可以运行了! - David

20

Irshad的解决方法对我很有效。在我的情况下,pki目录位于
C:\Users\<user_name>\AppData\Local\Docker


7

今天我遇到了这个问题,花了几个小时尝试解决。首先要找出为什么它一直在启动时挂起。您可以通过检查位于C:\ProgramData\DockerDesktop的日志来找到原因。那里会有一些service.txt文件,请打开最近修改的文件。

对我来说问题就是这个:

[19:32:58.189][ApiProxy][Error] time="2020-01-20T19:32:58+13:00" msg="Cannot list nodes: Get https://kubernetes.docker.internal:6443/api/v1/nodes: EOF"

一旦问题被确认,我们就可以轻松解决它。我需要删除C:\ProgramData\DockerDesktop文件夹中的pki文件夹(如issues/4316所述),并重新启动docker。

现在一切都好了。这可能不是所有启动挂起的原因,但检查日志肯定会有所帮助。

希望这可以帮到你!


1
在我的Windows上,文件夹和文件不在DockerDesktop中,而是通过gitbash访问:~/AppData/Local/Docker/log.txt。 - Xavi Montero

5

1
路径的正确值为 "%USERPROFILE%.kube\config"。 - John Palmer
在Windows上使用PowerShell # cd ~.kube\config - N Djel Okoye
我最初安装了minikube,但已将其删除。所以我的步骤如下:
  1. 重置docker-desktop
  2. 删除现有的%USERPROFILE%\.kube\config
  3. 再次在docker-desktop中启用Kubernetes
  4. 等待约3-5分钟 这似乎已经解决了问题。感谢您的答案。
- Preet Sangha

5

对我而言,Docker启动成功但是Kubernetes一直卡在"Starting"状态。

Irshad的解决方案也适用于我,只需删除"pki"文件夹即可。

Windows上的文件夹位置:C:\Users\\AppData\Local\Docker\pki


4

我在Windows 10上使用Docker Desktop 2.4.0时遇到了问题。

日志文件位于不同的位置-

C:\Users\\AppData\Local\Docker\log.txt

日志文件总是说出真相。 在我的情况下,我手动编辑了

C:\Users\.kube\config yaml文件

但弄乱了空格和制表符的位置。 纠正后,它就顺利启动了!


3

按照以下步骤解决了我的问题:

  1. 进入 C:\Windows\System32\drivers\etc
  2. 右键单击hosts文件并进入属性
  3. 禁用只读模式
  4. 重新安装docker

2

如果您想要禁用Kubernetes,但重置按钮无效,请按以下步骤操作:

  1. 点击“重置Kubernetes集群”
  2. 重新启动Docker(此时左上角的Kubernetes状态应为红色)
  3. 取消选中“启用Kubernetes”复选框
  4. 再次重启Docker。

1

请查看日志文件:
%USERPROFILE%\AppData\Local\Docker\log.txt

在我的情况下,我发现 Kubernetes 无法重新安装,因为我已经重命名了目录 %USERPROFILE%\.kube,以便从头开始。

但是环境变量 KUBECONFIG 仍然存在,并且引用一组不再存在的连接配置文件。

要解决此问题,我删除了环境变量,
然后通过 Docker Desktop UI 重新安装了 Kubernetes。
这将重新创建 %USERPROFILE%\.kube\config

然后我恢复了其他配置文件并重新创建了环境变量 KUBECONFIG 并将连接值进行了拼接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接