docker ps -a是查看所有容器(含运行中、已退出、已创建等状态)的标准命令,它通过-a参数显示全部容器,而docker ps默认仅显示running状态容器。

docker ps -a 是最直接的命令
要一次性看到所有容器(不管运行中还是已退出),docker ps -a 就是标准答案。它比 docker ps 多一个 -a(all)参数,会把 created、exited、paused 等所有状态的容器都列出来。
常见误区是以为 docker ps 能显示全部——其实它默认只显示 running 状态的容器,其他都过滤掉了。
-
docker ps -a输出里,STATUS列明确标出状态,比如Up 2 minutes、Exited (0) 10 seconds ago、Created - 如果只想看 ID,加
-q:docker ps -aq - 想按创建时间倒序(最新在前),加
--sort created:docker ps -a --sort created
docker container ls -a 和 docker ps -a 完全等价
docker container ls 是 docker ps 的完整写法,两者命令行为完全一致。所以 docker container ls -a 和 docker ps -a 输出一模一样,只是语义更清晰些——强调你在操作“容器”这个资源类型。
别被名字误导:ls 不是文件系统命令,而是 Docker CLI 对容器列表操作的别名。
- 所有别名都可用:
docker container list -a、docker container ps -a也合法(但不常用) - 脚本里建议统一用
docker ps -a,兼容性更好,老版本 Docker 也支持
为什么有时 docker ps -a 看不到刚 create 的容器?
因为 docker create 创建的是 created 状态容器,它确实会被 docker ps -a 列出——但前提是没加 --rm 或其他自动清理逻辑。
容易踩的坑:
- 用
docker run --rm启动后退出,容器立刻被删,docker ps -a就看不到它 - 容器因启动命令失败立即退出(比如
docker run alpine echo hello && exit 1),状态是exited (1),但可能被误认为“没创建成功” - 权限问题:非 root 用户没加
sudo,或没加入docker用户组,命令会静默失败或报permission denied
快速筛选特定容器时别用 grep 直接套 docker ps -a
比如想查叫 nginx-prod 的容器,不要写 docker ps -a | grep nginx-prod——这会把列头(CONTAINER ID、IMAGE…)也匹配进去,干扰判断。
更可靠的做法是让 Docker 自己过滤:
- 按名称精确匹配:
docker ps -a --filter "name=^nginx-prod$" - 按状态过滤已停止的:
docker ps -a --filter "status=exited" - 组合过滤(名称 + 状态):
docker ps -a --filter "name=db" --filter "status=running"
--filter 是原生支持,不依赖 shell 工具,输出干净,还能链式使用。











