首页 / Docker 入门教程 / 查看容器状态与日志

Docker 入门教程

查看容器状态与日志

本教程共 25 篇 · 第 8 篇 · 更新于 2026-07-26 · 约 8 分钟阅读

DockerDocker 入门教程docker psdocker logsdocker inspectdocker stats日志

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 能用,psimages 都支持。比如 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 做格式化,排查问题基本够用。

日志和状态都看明白了,下一节我们回到镜像本身,学学怎么管理镜像。