查看容器状态与日志
本教程共 25 篇 · 第 8 篇 · 更新于 2026-07-26 · 约 8 分钟阅读
8. 查看容器状态与日志
本节目标:学会用
ps看容器列表、logs看日志、inspect看详情、top看进程、stats看资源占用,掌握--format格式化输出。学完你能像体检一样把容器里里外外看个清楚。
列出容器:docker ps
docker ps 是最常用的查看命令,列出正在运行的容器:
docker ps
输出大概长这样:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1f7a4bb3a27 nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp web
各列含义:
- CONTAINER ID:容器 ID,唯一标识。
- IMAGE:用的镜像。
- COMMAND:启动时执行的命令。
- CREATED:创建时间。
- STATUS:状态,
Up表示运行中,附带运行时长。 - PORTS:端口映射。
- NAMES:容器名。
ps 默认只显示运行中的。想看全部(包括已停止的),加 -a:
docker ps -a
Tip
docker ps默认列宽有限,COMMAND 列经常被截断。加--no-trunc能看完整命令:docker ps --no-trunc。
几个常用选项
-q:只输出容器 ID,配合批量操作用。-l:只看最近创建的一个容器。-n 5:看最近 5 个容器(含停止的)。-s:额外显示容器文件大小。
看日志:docker logs
容器在后台跑,输出都进了日志。docker logs 把这些输出捞出来:
docker logs web
它会打印容器从启动到现在的全部标准输出。
跟进日志:-f
最常用的就是 -f(--follow),像 tail -f 一样实时滚动新日志:
docker logs -f web
新产生的日志会不断刷出来,按 Ctrl+C 退出跟进(容器不受影响,继续跑)。
只看尾部:—tail
日志太多不想全看,用 --tail 只看最后几行:
docker logs --tail 50 web
组合 -f 和 --tail 是日常排障最顺手的姿势—只跟进最新的,不被历史日志淹没:
docker logs -f --tail 50 web
按时间过滤:—since
想看某个时间点之后的日志:
docker logs --since 10m web
docker logs --since 2026-07-26T10:00:00 web
第一行看最近 10 分钟,第二行看指定时间之后。配合 -t(--timestamps)给每行加时间戳,排查「什么时候出的问题」很方便:
docker logs -t --since 5m web
Note
docker logs只能看容器主进程输出到 stdout/stderr 的内容。如果应用把日志写进了容器里的文件(比如/var/log/app.log),docker logs看不到,得用docker exec进去看,或者把日志目录挂出来。
看详情:docker inspect
inspect 返回容器或镜像的完整配置和状态,是一大段 JSON:
docker inspect web
信息很全—网络配置、挂载点、环境变量、启动命令、状态、IP 地址,应有尽有。缺点是太长,找特定字段得翻半天。
用 —format 提取字段
--format 用 Go 模板语法从 JSON 里精准取值,是 inspect 的最佳搭档。比如只看容器的 IP:
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web
看容器的启动命令:
docker inspect --format '{{.Config.Cmd}}' web
看挂载的卷:
docker inspect --format '{{.Mounts}}' web
Tip
--format不只inspect能用,ps、images都支持。比如docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"能输出一个清爽的三列表,比默认好看多了。
看进程:docker top
top 看容器里跑了哪些进程,输出格式和 Linux 的 top 类似:
docker top web
UID PID PPID ... TIME CMD
root 23245 23228 ... 00:00:00 nginx: master process nginx -g 'daemon off;'
root 23289 23245 ... 00:00:00 nginx: worker process
注意这里有两套 PID:容器内的 PID 和宿主机上的 PID(docker top 显示的是宿主机 PID)。排查「容器里到底起了几个进程」很有用。
看资源占用:docker stats
stats 实时显示所有运行中容器的 CPU、内存、网络、磁盘 IO 占用,类似 top 但针对容器:
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a1f7a4bb3a27 web 0.50% 12MiB / 1GiB 1.20% 5kB / 2kB 0B / 0B 3
它默认持续刷新,按 Ctrl+C 退出。只看一次不刷新,加 --no-stream:
docker stats --no-stream
Tip
stats是发现「哪个容器在吃内存」的第一工具。如果某容器 MEM% 一直涨,多半有内存泄漏。配合--memory限制给它上个上限,能防止单个容器把宿主机拖垮。
看端口映射:docker port
前面提过端口映射,想确认某个容器的端口映射情况,用 docker port:
docker port web
80/tcp -> 0.0.0.0:8080
输出容器内端口到宿主机端口的对应关系,比从 ps 那一长串里找清楚多了。
小结
这一节是容器的「体检工具箱」:ps 看列表、logs 看日志、inspect 看详情、top 看进程、stats 看资源、port 看端口。再加上 --format 做格式化,排查问题基本够用。
日志和状态都看明白了,下一节我们回到镜像本身,学学怎么管理镜像。