无直接互联网访问时Docker Desktop中Kubernetes启动失败如何解决
Kubernetes启动失败排查与离线部署方案
第一步:获取错误日志
- Windows本地日志路径:打开资源管理器访问
%LOCALAPPDATA%\Docker\log\vm,目录下前缀为kube的日志文件(如kubelet.log、kube-apiserver.log)记录了Kubernetes核心组件的运行报错,可直接查看镜像拉取、组件启动类的异常。 - WSL2虚拟机内日志获取:执行以下命令可直接读取容器运行时日志:
wsl -d docker-desktop cat /var/log/kubelet.log
第二步:离线环境自定义镜像源配置
你使用的Docker Desktop 3.6.0配套Kubernetes版本为v1.21.3,可通过以下两种方式解决镜像拉取问题,全程无需管理员权限:
方案1:通过自有Nexus仓库代理拉取
- 在你的Nexus仓库中创建
k8s.gcr.io的代理仓库,同步所有Kubernetes v1.21.3版本依赖的镜像,完整依赖列表可通过联网环境执行以下命令获取:
docker run --rm -it k8s.gcr.io/kubeadm:v1.21.3 config images list
- 打开Docker Desktop设置界面,进入「Docker Engine」配置页,在
daemon.json的registry-mirrors数组中添加你的Nexus仓库地址,保存后重启Docker Desktop。此时所有对k8s.gcr.io的镜像拉取请求会自动转发到你的Nexus代理仓库。
方案2:手动导入镜像
如果无法配置Nexus代理,可手动导入提前准备好的镜像:
- 在联网环境拉取所有Kubernetes依赖镜像后,执行导出命令:
docker save k8s.gcr.io/kube-apiserver:v1.21.3 k8s.gcr.io/kube-controller-manager:v1.21.3 k8s.gcr.io/kube-scheduler:v1.21.3 k8s.gcr.io/kube-proxy:v1.21.3 k8s.gcr.io/pause:3.4.1 k8s.gcr.io/etcd:3.4.13-0 k8s.gcr.io/coredns/coredns:v1.8.0 > k8s-v1.21.3-images.tar
- 将导出的tar包拷贝到工作机器,执行导入命令:
docker load -i k8s-v1.21.3-images.tar - 导入完成后重启Docker Desktop,重新开启Kubernetes功能,平台会优先使用本地已存在的镜像,无需联网拉取。
第三步:验证启动结果
启动完成后执行kubectl get nodes,如果返回节点状态为Ready即部署成功。
内容的提问来源于stack exchange,提问作者Hollerweger
相关产品推荐
相关产品推荐

