docker ps 一眼看懂:容器状态速查
docker ps 输出那一堆列到底在说什么?CONTAINER ID、STATUS、PORTS 一眼看懂,外加 inspect、top、stats、rename 等配套命令,查容器状态一篇就够。
我是小够,只推够用的 VPS。
docker ps 是你和容器打交道最多的命令,但它的输出对新手不太友好。今天把它掰开,一列一列讲清楚,再配几个配套命令,查容器状态一篇就够。
先跑一个看看
docker ps
典型输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 nginx:alpine "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp web
每一列是什么意思
- CONTAINER ID:容器身份证,前 12 位,敲命令时写前 3-4 位一般就能唯一匹配,偷懒必备。比如
docker logs a1b2就行,不用全敲。 - IMAGE:这个容器从哪个镜像来的,带 tag,一眼看出版本。
- COMMAND:容器启动时执行的命令,一般不用管,但排错时能确认"起的是不是我想的那个进程"。
- CREATED:容器创建了多久。刚
up的项目,这里应该是几分钟前;如果显示几天前,说明是很久没重建的老容器。 - STATUS:重点看这列,状态全解:
Up 2 hours:正常运行 2 小时。Up 2 hours (healthy):运行中且健康检查通过(配了 healthcheck 才有)。Up 2 hours (unhealthy):运行中但健康检查失败,应用可能有问题,赶紧看日志。Exited (0):正常退出,比如一次性任务跑完了,别当故障。Exited (1):报错退出,看日志找原因。Exited (137):被 OOM kill,内存爆了。Restarting (1) 5 seconds ago:在反复重启——基本就是配置有问题,看日志,括号里是退出码。Created:建好了但没启动,docker start启动它。Paused:被暂停了,docker unpause恢复。Dead:僵死状态,极少见,重启 Docker 守护进程一般能解决。
- PORTS:
0.0.0.0:8080->80/tcp表示主机的 8080 映射到容器的 80。如果这列是空的,说明没做端口映射,外面访问不到。如果是127.0.0.1:8080->80/tcp,表示只监听本机,外面也访问不到——排错那篇讲过这个坑。 - NAMES:容器名,
docker compose起的一般是"目录名-服务名-序号",比如wordpress-web-1。
三个变体,记住就够
docker ps -a # 看所有容器,包括停掉的。找"我刚才跑的那个去哪了"用它
docker ps -q # 只输出 ID,适合接管道批量操作,比如 docker stop $(docker ps -q)
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" # 自定义列,清爽
docker ps -s # 多一列 SIZE,看可写层大小(可写层那篇讲过)
配套命令:状态之外的信息
docker stats # 实时看每个容器的 CPU、内存占用,排查"谁把机器吃满了"
docker stats --no-stream # 只看一眼,不持续刷新
docker top 容器名 # 看容器里跑的进程
docker port 容器名 # 看端口映射
docker inspect 容器名 # 看完整配置(JSON,信息最全)
docker inspect -f '{{.State.Status}}' 容器名 # 只取状态,写脚本用
docker rename 旧名 新名 # 给容器改名
docker inspect 输出很长,配合 -f 取字段是常用技巧,写监控脚本时用得上。比如定时检查容器是不是 healthy:
docker inspect -f '{{.State.Health.Status}}' 容器名
排错小技巧
容器 Up 了但网站打不开?按这个顺序查:docker ps 看 PORTS 映射对不对 → docker logs 容器名 看应用报错 → curl localhost:端口 在本机试。八成问题出在这三步里,剩下的两成看本月排错手册那篇。
还有个习惯:出问题先 docker ps -a 看所有容器,别只看运行中的。刚退出的容器状态里藏着退出码,那是第一线索。