容器运维核心命令参考手册:Docker + K8s 全场景速查
来源:老郭 | 发布日期:2026-06-02
Docker 容器管理命令速查
| 目的 | 命令 |
|---|---|
| 列出所有容器(含停止) | docker ps -a |
| 查看容器详细信息(JSON) | docker inspect <容器名> |
| 查看重启次数 | docker inspect -f '{{.RestartCount}}' <容器名> |
| 查看退出码 | docker inspect -f '{{.State.ExitCode}}' <容器名> |
| 查看容器 IP | docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名> |
| 查看容器内进程 | docker top <容器名> |
| 进入容器(bash) | docker exec -it <容器名> /bin/bash |
| 进入容器(精简镜像用 sh) | docker exec -it <容器名> /bin/sh |
| nsenter 进入卡死容器 | PID=$(docker inspect --format '{{.State.Pid}}' <容器名>) && nsenter -t $PID -m -u -i -n |
| 查看日志(持续跟踪) | docker logs -f <容器名> |
| 查看最近 N 行 | docker logs --tail 200 <容器名> |
| 查看某时间后日志 | docker logs --since "2024-06-01T03:00:00" <容器名> |
| 查看资源实时占用 | docker stats |
| 查看单次资源占用 | docker stats --no-stream <容器名> |
| 查看资源限制配置 | docker inspect <容器名> \| jq '.[0].HostConfig' |
| 查看端口映射 | docker port <容器名> |
Docker 镜像管理
| 目的 | 命令 |
|---|---|
| 列出本地镜像 | docker images |
| 拉取镜像 | docker pull <镜像名>:<标签> |
| 删除镜像 | docker rmi <镜像名或ID> |
| 清理 dangling 镜像 | docker image prune |
| 清理所有未使用镜像 | docker image prune -a |
| 全量清理(镜像/容器/网络) | docker system prune -a |
| 构建镜像 | docker build -t <镜像名>:<标签> -f Dockerfile . |
| 查看构建历史 | docker history <镜像名> |
| 测试 registry 连通性 | curl -I https://registry-1.docker.io/v2/ |
Docker 存储卷与网络
| 目的 | 命令 |
|---|---|
| 列出存储卷 | docker volume ls |
| 查看卷详情 | docker volume inspect <卷名> |
| 查看容器挂载 | docker inspect -f '{{.Mounts}}' <容器名> |
| 清理未使用卷 | docker volume prune |
| 列出网络 | docker network ls |
| 查看网络详情 | docker network inspect <网络名> |
| 进入容器排查网络 | docker exec -it <容器名> netstat -tunapl |
日志轮转配置
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "10",
"compress": "true"
}
}
配置于 /etc/docker/daemon.json,修改后 systemctl reload docker。
Kubernetes Pod 操作速查
| 目的 | 命令 |
|---|---|
| 列出 Pod | kubectl get pods -n <ns> |
| Pod 详情(含事件) | kubectl describe pod <name> -n <ns> |
| 查看 YAML | kubectl get pod <name> -n <ns> -o yaml |
| 查看日志 | kubectl logs -f <name> -n <ns> |
| 查看退出的容器日志 | kubectl logs <name> -n <ns> --previous |
| 进入 Pod | kubectl exec -it <name> -n <ns> -- /bin/bash |
| 资源使用 | kubectl top pod <name> -n <ns> |
| 按 CPU/内存排序 | kubectl top pods -n <ns> --sort-by='.cpu\|.memory.usage' |
| 删除 Pod | kubectl delete pod <name> -n <ns> |
| 强制删除卡住 Pod | kubectl delete pod <name> -n <ns> --grace-period=0 --force |
| 移除 finalizer | kubectl patch pod <name> -n <ns> -p '{"metadata":{"finalizers":[]}}' --type=merge |
| 查看 Service endpoints | kubectl get endpoints <svc> -n <ns> |
| 查看节点详情 | kubectl describe node <node> |
| 查看事件(排序) | kubectl get events -n <ns> --sort-by='.lastTimestamp' |
| 查看配额 | kubectl get resourcequota -n <ns> |
Pod 调度排查
# 查看调度结果(Node)
kubectl get pod <name> -n <ns> -o wide
# 查看 Node 资源分配
kubectl describe node <node> | grep -A 10 "Allocatable"
# 查看调度失败原因
kubectl describe pod <name> -n <ns> | grep -A 20 "Events"
# 查看 Node 污点
kubectl describe node <node> | grep -A 5 "Taints"
# 查看 Pod 容忍
kubectl get pod <name> -n <ns> -o jsonpath='{.spec.tolerations}'
五大高频故障排障流程
1. DNS 解析异常
Pod 内能 ping IP 但无法解析服务名:
kubectl exec -it <pod> -n <ns> -- nslookup kubernetes.default
kubectl exec -it <pod> -n <ns> -- cat /etc/resolv.conf
# 检查 CoreDNS
kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl logs -n kube-system -l k8s-app=kube-dns -c coredns
# 重启 CoreDNS
kubectl rollout restart deployment/coredns -n kube-system
常见原因:CoreDNS 异常、resolv.conf 错误、NetworkPolicy 阻止 UDP 53。
2. 镜像拉取失败(ImagePullBackOff)
kubectl describe pod <name> -n <ns> | grep -A 10 "Events"
常见原因及修复:
- 镜像名拼写错误 — 检查正确名称
-
私有仓库未配置 Secret — 创建 imagePullSecrets:
bash kubectl create secret docker-registry <name> --docker-server=<registry> --docker-username=<user> --docker-password=<pass> -n <ns>在 Pod 或 ServiceAccount 中引用该 Secret -
认证过期 — 更新 Secret
- Tag 不存在 — 避免用
latest - 网络不通 — 检查 registry 连通性
3. 容器启动后立即退出(CrashLoopBackOff)
kubectl logs <name> -n <ns> --previous
kubectl describe pod <name> -n <ns> | grep -A 20 "State:"
常见原因:启动命令错误、配置缺失/路径错、健康检查失败、依赖服务不可达、权限问题。
4. 存储卷挂载异常(ContainerCreating)
kubectl get pvc -n <ns> # PVC 状态
kubectl get pv # PV 状态
kubectl describe pvc <name> -n <ns> # PVC 详情
kubectl get storageclass # StorageClass 存在?
常见原因:SC 不存在、accessMode 不匹配、云盘未挂载、reclaimPolicy=Delete 误删 PV。
5. 内存 OOM(OOMKilled)
kubectl describe pod <name> -n <ns> | grep -A 5 "Last State"
kubectl get pod <name> -n <ns> -o jsonpath='{.status.containerStatuses[*].lastState.terminated.reason}'
# Node 上查 kubelet 日志
journalctl -u kubelet | grep -i oom
常见原因:内存泄漏、JVM -Xmx 超容器 limits、业务增长未调 limits。
Pod 健康检查(Probe)配置参考
livenessProbe: # 存活检查——失败重启容器
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 60 # 等待应用启动
periodSeconds: 15 # 每 15 秒检查
timeoutSeconds: 5 # 超时 5 秒
failureThreshold: 3 # 连续 3 次失败才重启
readinessProbe: # 就绪检查——失败摘除流量
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 2
startupProbe: # 启动探针(1.20+)——给慢启动应用更多时间
httpGet:
path: /healthz
port: 8080
failureThreshold: 30
periodSeconds: 10 # = 最多 5 分钟启动时间
initialDelaySeconds 过短是最常见错误。应用启动 30 秒但探针设 5 秒 → 容器不断重启。
QoS 等级与驱逐优先级
| QoS | 条件 | 驱逐顺序 |
|---|---|---|
| Guaranteed | requests == limits(CPU+内存) | 最后被驱逐 |
| Burstable | 至少一个容器设了 requests,但不等同 limits | 中等 |
| BestEffort | 未声明任何 resources | 最先被驱逐 |
Deployment 回滚
kubectl rollout history deployment/<name> -n <ns> # 查看版本
kubectl rollout undo deployment/<name> -n <ns> # 回滚到上一版
kubectl rollout undo deployment/<name> -n <ns> --to-revision=<N> # 回滚指定版本
kubectl rollout status deployment/<name> -n <ns> # 确认状态
生产风险提醒
| 高危操作 | 风险 | 建议 |
|---|---|---|
docker exec 进生产容器 |
消耗宿主机资源,加剧负载 | 优先 docker logs |
docker system prune -a |
删除所有未使用镜像/容器/网络 | 确认重要镜像已打 tag |
kubectl delete pod --force |
直接释放资源,可能数据丢失 | 确认数据已同步 |
| 删除 PVC(reclaimPolicy=Delete) | 自动删 PV 和底层存储,不可恢复 | 确认已备份 |
| livenessProbe 设太激进 | 容器不断重启,业务起不来 | initialDelaySeconds 大于启动时间 |
验证方法
# Docker:确认容器 Up
docker ps | grep <name>
docker exec -it <name> netstat -tlnp | grep <port>
docker logs --tail 50 <name> | grep -i error
# K8s:确认 Pod Running + Ready 1/1
kubectl get pods -n <ns> | grep <name>
kubectl exec -it <pod> -n <ns> -- netstat -tlnp
kubectl logs -f <pod> -n <ns> | grep -i error
关联页面
| 页面 | 关联点 |
|---|---|
| docker-production-pitfalls | Docker 生产环境踩坑指南 |
| pod-troubleshooting | Pod 排障 |
| container-networking-troubleshooting | 容器网络排障 |
| k8s-resource-limits-configuration | 资源限制配置 |
| storage-troubleshooting | 存储排障 |
| k8s-scheduling-strategy-guide | Pod 调度策略 |
| linux-essential-commands-reference | Linux 命令速查 |