查看运行中的容器
状态docker ps --format \
'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
按名称、镜像、状态和端口输出表格。查看全部容器时增加 -a。
面向日常服务器维护与故障排查,整理 Docker、Kubernetes、网络抓包和 Linux 系统工具的高频用法。
查看容器状态、日志、资源占用,以及进入容器进行排查。
docker ps --format \
'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
按名称、镜像、状态和端口输出表格。查看全部容器时增加 -a。
docker logs --since 30m \
--tail 200 -f <container>
显示最近 30 分钟内的末尾 200 行并持续跟踪;按 Ctrl+C 退出。
docker exec -it <container> sh
# 镜像包含 Bash 时
docker exec -it <container> bash
在运行中的容器内启动交互式 Shell。精简镜像通常只有 sh。
docker stats --no-stream
docker compose ps
docker compose logs -f --tail 100
依次查看容器资源快照、Compose 服务状态和最近日志。
快速定位 Pod、事件、日志与 Deployment 发布状态。
kubectl get pods -A -o wide
# 持续观察变化
kubectl get pods -A -w
-A 表示所有命名空间,-o wide 会补充节点、Pod IP 等信息。
kubectl describe pod <pod> \
-n <namespace>
kubectl get events -A \
--sort-by=.metadata.creationTimestamp
镜像拉取、调度、健康检查等问题通常可从详情底部的 Events 开始定位。
kubectl logs <pod> -n <namespace> \
--tail=200 -f
# 查看上一次退出的容器
kubectl logs <pod> -c <container> \
-n <namespace> --previous
多容器 Pod 使用 -c 指定容器;CrashLoopBackOff 时可用 --previous。
kubectl exec -it <pod> \
-n <namespace> -- sh
kubectl rollout status \
deployment/<name> -n <namespace>
第一条进入 Pod;第二条等待 Deployment 发布完成并返回最终状态。
按网卡、主机、端口和 TCP 标志过滤流量,并保存为抓包文件。
sudo tcpdump -D
sudo tcpdump -nn -i any \
'host 10.0.0.8 and port 443'
-nn 禁止解析主机名和服务名,-i any 监听全部接口。
sudo tcpdump -nn -i eth0 \
'tcp[tcpflags] & tcp-syn != 0'
捕获带 SYN 标志的 TCP 报文,适合确认连接请求是否到达服务器。
sudo tcpdump -i eth0 -s 0 \
-w capture.pcap 'port 8080'
tcpdump -nn -r capture.pcap
-s 0 捕获完整报文,-w 写入文件,-r 离线读取。
src host 10.0.0.8
dst port 53
tcp and portrange 8000-9000
not port 22
过滤条件可通过 and、or、not 组合;复杂表达式建议使用引号。
分别观察 CPU、内存、线程和磁盘 I/O 的实时占用。
top
# 只观察某进程的线程
top -H -p <PID>
进入 top 后可使用以下快捷键切换视图或排序。
top -b -n 1 | head -30
ps aux --sort=-%cpu | head
-b 使用批处理模式,便于保存现场或放入诊断脚本。
sudo iotop -oPa
-o 仅显示活跃项,-P 按进程显示,-a 累计本次运行期间的 I/O。
sudo iotop -p <PID>
# 批处理输出 3 次
sudo iotop -b -n 3 -d 2
-d 2 表示两秒刷新一次;iotop 一般需要 root 权限和内核任务统计支持。
使用 systemd 和 journalctl 检查服务状态、启动记录和实时日志。
systemctl status <service> \
--no-pager -l
systemctl is-active <service>
-l 防止长行截断,is-active 适合快速判断运行状态。
journalctl -u <service> \
-n 200 --no-pager
journalctl -u <service> -f
第一条读取最近 200 行,第二条持续跟踪新日志。
journalctl --since '30 min ago' \
-p warning --no-pager
journalctl -b -1 -p err
查看最近 30 分钟的警告,以及上一次系统启动中的错误日志。
systemctl --failed
journalctl -b -p err --no-pager
先定位失败单元,再结合本次启动的错误日志确认原因。
查看监听端口、连接概览、DNS 解析和 HTTP 服务响应。
sudo ss -lntp
# 查看连接统计
ss -s
l/n/t/p 分别表示监听、禁止名称解析、TCP 和进程信息。
curl -sSIL --connect-timeout 5 \
https://example.com/
curl -sS -o /dev/null \
-w 'status=%{http_code} time=%{time_total}\n' \
https://example.com/
分别查看跳转链与响应头,以及最终状态码和请求总耗时。
dig +short example.com A
dig +short example.com AAAA
getent ahosts example.com
dig 直接查询 DNS;getent 按系统实际名称解析配置查询。
ip route get 1.1.1.1
tracepath example.com
# 基础连通与时延
ping -c 4 example.com
依次查看本机选路、路径 MTU 与中间路径,以及 ICMP 往返时延。
确认文件系统使用率、目录占用和大文件位置。
df -hT
# 查看 inode 使用率
df -ih
-h 使用易读单位,-T 显示文件系统类型;空间充足但无法写入时应检查 inode。
sudo du -xhd1 /var | sort -h
sudo du -xhd1 /var/log | sort -h
-x 不跨文件系统,-d1 只统计下一层目录。
sudo find /var/log -xdev -type f \
-size +500M -ls
查找当前文件系统内超过 500 MB 的普通文件。处理前先确认文件用途与保留策略。
sudo lsof +L1
文件虽已删除但仍被进程持有时,磁盘空间不会释放;结果可用于定位对应进程。