容器崩了该找 Docker 还是 K8s?故障恢复时,两者分工差在哪?
2025/11/07
黄老师

容器突然崩了,运维兄弟常手忙脚乱:到底该查 Docker 还是调 K8s?这俩都是容器生态的核心工具,但故障恢复时职责总糊在一起,很容易走弯路 —— 比如明明是 Docker 镜像坏了,却死磕 K8s 配置,半天没进展。我结合平时处理故障的经验,把两者的定位、判断方法和分工拆清楚,帮大家快速解决问题。
一、先搞懂:Docker 和 K8s 到底是干啥的,分工才好分
- 把应用和依赖打包成镜像,保证换个环境也能跑;
- 创建、启动、停止单个容器,还能看这个容器的状态 —— 比如是不是活的、占了多少内存;
- 处理容器和宿主机的本地交互,比如把宿主机的目录挂到容器里,或者配置容器的网络。
简单说,Docker 只盯着 “单个容器”,不管一堆容器怎么协同,更没能力跨节点调度。
感兴趣可了解>>>Docker容器技术与安装教程视频介绍
- 它不直接建容器(底层还是靠 Docker 这类引擎),而是通过 Pod、Deployment 这些东西批量管容器;
- 能让容器崩了自动恢复、跨节点迁移,还能分配资源 —— 比如哪个容器多给点内存;
- 保障整个集群的服务能用,比如帮你找到服务在哪、把请求分到不同容器上。
K8s 看的是 “全局”,单个容器的细节它不管。
感兴趣可了解>>>Kubernetes 架构、安装和配置视频介绍
二、快速判断:容器崩了,先找 Docker 还是 K8s?
- 常见原因比如镜像坏了(拉的时候断了、本地镜像文件损坏)、容器配置错了(端口跟别的程序冲突、挂的目录根本不存在),或者宿主机给这个容器的资源不够(比如内存跑满了);
- 第一步先查 Docker:敲 docker ps -a 看看容器状态,再用 docker logs 容器ID 读崩溃日志,一般能很快找到问题 —— 比如日志里写 “镜像不存在”,那就是镜像的事。
- 常见的比如 Pod 资源给少了(内存不够被系统杀掉,就是常说的 OOM)、健康检查配置错了(比如没响应就重启,结果一直重启),或者依赖的 ConfigMap、Secret 没挂上去 —— 容器启动要的配置找不到,自然崩;
- 第一步查 K8s:敲 kubectl describe pod Pod名称 看事件日志,重点看 “Events” 那块,比如里面写 “Failed to pull configmap”,就是配置没挂对。
- 可能是 Docker 后台进程(daemon)崩了,或者宿主机内核跟 Docker 版本不兼容,也可能是 Docker 的存储驱动出问题;
- 第一步先看 Docker 状态:敲 systemctl status docker,要是 daemon 没跑,先重启试试 ——systemctl restart docker,重启完再看容器能不能恢复。
- 比如没用水 Deployment 管 Pod(裸 Pod 崩了不会自己恢复)、集群节点太少 —— 就一个节点,挂了没地方迁,或者 K8s 控制节点没做高可用(就一个 master 节点,挂了整个集群没法管);
- 第一步查节点状态:敲 kubectl get nodes,要是节点显示 “NotReady”,先想办法恢复节点,或者让 K8s 在其他好节点上重新建 Pod。
三、Docker 管啥:就修单个容器的 “本地问题”
- 进程崩了:比如日志里写 “Java OutOfMemoryError”,先把应用代码修了,再敲 docker start 容器ID 重启,不行就用 docker run 重新建一个;
- 资源不够:敲 docker stats 看看这个容器之前占多少资源,要是内存不够,用 docker update --memory 2G 容器ID 加内存,再重启;
- 网络不通:敲 docker network inspect 网络名 看看网络配置,要是容器没加对网络,用 docker network connect 网络名 容器ID 把它连进去就行。
- 镜像有问题:敲 docker images 看看本地有没有这个镜像,要是没了或者坏了,用 docker pull 镜像名:标签 重新拉,比如 docker pull nginx:1.24;要是本地镜像坏了,先 docker rmi 损坏镜像ID 删掉再拉;
- 挂载有问题:敲 docker inspect 容器ID 看看挂了哪个目录,去宿主机确认这个目录存在,权限也对 —— 比如给个 chmod 755 /data,修好再重启容器。
- daemon 崩了:先试 systemctl restart docker 重启,要是起不来,去看 /var/log/docker.log 找原因 —— 比如日志里说内核版本不对,那就升级内核;
- 版本不兼容:要是重启后还是不行,敲 docker version 看看版本,参考 Docker 官方文档换个稳定版,比如 25.0.x 系列,别用太新的测试版。
四、K8s 管啥:管集群里容器的 “全局调度”
- 原理很简单:比如你配了 replicas: 3,就是要 3 个容器跑着,要是一个崩了,K8s 会通过健康检查(livenessProbe)发现,然后在好的节点上让 Docker 新建一个;
- 操作上:先敲 kubectl get deployment 看看控制器状态,要是 “READY” 数不够,比如应该 3 个只 ready 2 个,就用 kubectl describe deployment 名称 查原因 —— 比如镜像拉不下来,那就是镜像地址错了。
- 流程大概是这样:kubelet 发现节点状态变成 “NotReady”→ 把这个节点上的 Pod 标成 “不可用”→ 调度器(kube-scheduler)在好节点上重新安排这些 Pod→ 底层 Docker 启动新容器;
- 这里要注意:集群节点至少 3 个,不然一个挂了没地方迁;Deployment 副本数至少 2 个,避免一个容器崩了服务就停了。
- 先设资源限制:在 Deployment 里写 resources.limits.cpu: 1 resources.limits.memory: 2G,别让一个容器占太多资源,影响其他容器;
- 再开自动扩缩容:用 HPA(Horizontal Pod Autoscaler),比如 CPU 使用率超 70% 就多开几个副本,敲 kubectl autoscale deployment 名称 --min=2 --max=5 就能启用,不用手动加副本。
五、实际案例:电商订单服务容器崩了,怎么配合恢复
- 先定归属:敲 kubectl get pods -n order-service,看到 2 个 Pod 状态是 “CrashLoopBackOff”,其他 Pod 正常 —— 初步判断是 K8s 配置的问题;
- 查 K8s 原因:敲 kubectl describe pod order-pod-xxx,Events 里写着 “OOM killed”—— 原来 Pod 内存给少了,才 1G,促销期间请求多就不够用;
- 调 K8s 配置:把 Deployment 里的 resources.limits.memory 从 1G 改成 2G,再敲 kubectl apply -f order-deployment.yaml 生效;
- 等 K8s 调度:K8s 自动把崩了的 Pod 删了,在好的节点上让 Docker 拉镜像、建新 Pod;
- 用 Docker 验证:去新 Pod 所在的节点,敲 docker ps 看容器是不是在跑,再用 docker logs 容器ID 确认应用没报错;
- 最后查服务:敲 kubectl get svc order-service,用 Service 地址测了下,订单能正常下了,故障就解决了。
六、避坑提醒:这 3 个错别犯,不然越修越乱
- 别用 Docker 命令改 K8s 管的容器:之前见过有人容器崩了,直接用 docker stop 停了再建,结果 K8s 以为容器又崩了,不停重建,越改越乱 ——K8s 管的容器,就用 K8s 命令调;
- Docker 底层坏了,K8s 也没办法:要是 Docker 引擎崩了,K8s 只能看到 Pod 异常,没法自己修 Docker,得先把 Docker 修好,K8s 才能接着调度;
- 不配高可用,K8s 救不了你:要是用裸 Pod(没 Deployment)、副本数就 1 个,或者集群就一个节点,K8s 想自动恢复也没辙 —— 生产环境一定要配 Deployment、多副本、多节点。
七、Docker 和 K8s 配合好,故障恢复才快
附录:Docker 故障排查常用命令汇总

-
开设课程 开班时间 在线报名OCP2025.04.26
在线报名
HCIP-AI Solution2025.04.26在线报名
HCIE-openEuler2025.05.03在线报名
RHCA-CL2602025.05.04在线报名
HCIP-Cloud2025.05.10在线报名
PGCM直通车2025.05.10在线报名
HCIA-Datacom(晚班)2025.05.19在线报名
HCIA-Sec2025.06.07在线报名
RHCA-RH4422025.06.07在线报名
PMP2025.06.10在线报名
HCIA-Datacom2025.06.14在线报名
HCIE-AI Solution2025.06.14在线报名
HCIE-Datacom2025.06.14在线报名
HCIP-Datacom(晚班)2025.06.16在线报名
OCM2025.06.21在线报名
HCIE-Cloud2025.06.21在线报名
HCIP-Sec2025.06.21在线报名
HCIE-Bigdata2025.06.28在线报名
RHCE2025.06.28在线报名
HCIE-Datacom考前辅导2025.07.05在线报名
HCIP-Datacom深圳2025.07.19在线报名
CISP2025.07.19在线报名
HCIA-Datacom(晚班)2025.07.21在线报名
RHCA-RH4362025.07.26在线报名
OCP2025.07.26在线报名
HCIE-Sec2025.08.09在线报名
HCIA-AI Solution2025.08.16在线报名
HCIP-Datacom(晚班)2025.08.25在线报名
RHCA-RH3582025.09.06在线报名
PMP2025.09.16在线报名
HCIE-Datacom2025.09.06在线报名
HCIA-AI Solution2025.09.27在线报名
HCIA-Datacom2025.09.27在线报名
PGCM直通车2025.10.11在线报名
RHCA-DO3742025.10.11在线报名
HCIA-Sec2025.10.11在线报名
RHCE2025.10.18在线报名
HCIP-Datacom2025.11.08在线报名
HCIP-Sec2025.11.08在线报名
RHCA-CL2602025.11.15在线报名
OCP2025.11.15在线报名
HCIE-Sec2025.12.13在线报名
HCIE-Datacom2026.01.10在线报名