docker ps是最直接有效的命令,用于立即查看当前正在运行的容器,仅显示status为up的容器,包含容器id、镜像名、启动命令、运行时长、端口映射和名称等清晰字段,无需额外参数或依赖容器内工具。

docker ps 是最直接有效的命令
想立刻知道当前有哪些容器在跑,docker ps 就是唯一该敲的命令。它只列出 Status 为 Up 的容器,字段清晰:容器 ID、镜像名、启动命令、运行时长、端口映射、名称。不需要额外参数,也不依赖容器里装没装 ps 或其他工具。
常见误操作是加 -a 后反复刷新看“有没有新容器起来”——这反而会混入大量已退出的旧容器,干扰判断。真要对比状态变化,建议用 watch -n 1 'docker ps',每秒刷新一次,一眼看出增减。
容器明明在跑,但 docker ps 不显示?先查 Docker 服务状态
docker ps 返回空或报错,大概率不是容器问题,而是 Docker daemon 没起来。此时 systemctl status docker 会明确告诉你服务是 inactive (dead) 还是卡在 activating 状态。
- 如果服务未运行,用
sudo systemctl start docker启动 - 如果启动失败,重点看
journalctl -u docker --since "1 hour ago"里的 ERROR 行,常见原因是/var/lib/docker权限异常或磁盘满 - 别信
ps aux | grep dockerd——进程存在不代表服务健康,systemd 状态才是权威
需要过滤或格式化输出?用 --filter 和 --format
当服务器上容器多、命名不规范时,靠肉眼扫 docker ps 容易漏。这时候两个参数比管道 grep 更可靠:
-
docker ps --filter "status=running" --filter "name=nginx":按状态和名称双重过滤,name支持正则(如name=^prod-.*$) -
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}":自定义列,避免默认输出中过长的COMMAND折行干扰阅读 - 注意:
--filter不支持模糊匹配镜像标签(如nginx:1.20不能用nginx:1.*),必须写全
docker ps 显示 Up,但业务不可用?得看容器内进程是否真活着
docker ps 只反映容器进程(即 PID 1)是否存活,不保证内部服务正常。比如 Nginx 容器可能 Up 2 hours,但实际 worker 进程全崩了。
这时必须补两步验证:
- 用
docker top <container_id></container_id>看容器内 PID 1 下挂了哪些子进程,如果只有bash或sh,说明主服务根本没起来 - 用
docker logs --tail 20 <container_id></container_id>检查末尾日志,重点关注failed to bind、permission denied、connection refused这类关键词
真正关键的不是“容器在不在”,而是“容器里你要的那个进程在不在、有没有持续输出有效日志”。docker ps 只是第一道门,跨过去还得继续查。











