目錄
docker ps 指令:列出容器(篩選與自訂格式)
docker ps 列出容器。完整的容器操作見 容器生命週期。
語法
docker ps [參數]
docker ps 與 docker container ls 是同一個指令。
參數
| 參數 | 說明 |
|---|---|
-a, --all | 列出所有容器,包括已停止的(預設只列出執行中的) |
-q, --quiet | 只輸出容器 ID |
-f, --filter 條件 | 篩選,可以重複使用多個 |
--format 範本 | 自訂輸出格式,table、json 或 Go 範本 |
-n, --last 數字 | 最近建立的 n 個容器(包含所有狀態) |
-l, --latest | 最近建立的一個容器 |
-s, --size | 顯示容器的大小 |
--no-trunc | 不截斷輸出(完整的 ID 與指令) |
常用的 --filter 條件:
| 條件 | 範例 |
|---|---|
status | status=running、status=exited、status=created |
name | name=web(部分比對) |
label | label=team=backend |
ancestor | ancestor=nginx:1.30-alpine(由某個映像檔建立) |
exited | exited=137(依結束代碼) |
publish | publish=8080(使用某個連接埠) |
network / volume | network=appnet、volume=pgdata |
health | health=unhealthy |
範例
環境中有三個容器:執行中的 web(nginx)與 worker1(加了標籤 team=backend),以及已經結束的 stopped1。
執行中與全部
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 2 seconds ago Up 2 seconds worker1
1ec4fdc5c592 nginx:1.30-alpine "/docker-entrypoint.…" 8 seconds ago Up 2 seconds 80/tcp web
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 2 seconds ago Up 2 seconds worker1
17b5b9a8c9ce alpine:3.23 "true" 3 seconds ago Exited (0) 2 seconds ago stopped1
1ec4fdc5c592 nginx:1.30-alpine "/docker-entrypoint.…" 8 seconds ago Up 2 seconds 80/tcp web
$ docker ps -q
c260b28b0630
1ec4fdc5c592
docker ps 沒有列出 stopped1,docker ps -a 才看得到它,狀態是 Exited (0)。-q 只輸出 ID,方便交給其他指令使用。
篩選
$ docker ps -a --filter status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17b5b9a8c9ce alpine:3.23 "true" 3 seconds ago Exited (0) 2 seconds ago stopped1
$ docker ps --filter name=work
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 2 seconds ago Up 2 seconds worker1
$ docker ps --filter label=team=backend
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 2 seconds ago Up 2 seconds worker1
自訂欄位
$ docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
NAMES IMAGE STATUS
worker1 alpine:3.23 Up 2 seconds
web nginx:1.30-alpine Up 3 seconds
table 會加上標題列,欄位之間用 \t(Tab)分隔。常用的欄位:.ID、.Names、.Image、.Status、.Ports、.CreatedAt、.Labels、.Size。輸出成 JSON 用 --format json。
大小與最新的容器
$ docker ps -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
c260b28b0630 alpine:3.23 "sleep 600" 3 seconds ago Up 2 seconds worker1 4.1kB (virtual 9.1MB)
1ec4fdc5c592 nginx:1.30-alpine "/docker-entrypoint.…" 9 seconds ago Up 3 seconds 80/tcp web 86kB (virtual 66.8MB)
$ docker ps -n 1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 3 seconds ago Up 2 seconds worker1
SIZE的第一個數字是容器自己寫入的大小(可寫層),virtual包含映像檔。nginx 容器啟動時寫了一些暫存檔,所以有 86kB。-n 1只顯示最近建立的一個。
批次處理:刪除所有已停止的容器
$ docker rm $(docker ps -aq --filter status=exited)
17b5b9a8c9ce
$(...) 先執行裡面的指令,把結果(所有已停止容器的 ID)當成 docker rm 的參數。同樣的效果也可以用 docker container prune(見 清理硬碟空間)。
PowerShell 也支援
$(...)的寫法;Windows CMD 不支援,請改用docker container prune。
相關章節
- 容器生命週期
- docker inspect:查看單一容器的詳細資訊
- docker compose 指令:
docker compose ps
動手練習
練習:列出所有由 nginx:1.30-alpine 建立的容器(包括已停止的),只顯示名稱與狀態。
答案
docker ps -a --filter ancestor=nginx:1.30-alpine --format "table {{.Names}}\t{{.Status}}"
常見問題
docker ps 看不到剛剛執行的容器?
docker ps 只列出**執行中**的容器。容器已經結束(例如一次性的指令、或啟動失敗)時要用 docker ps -a。
docker ps 和 docker container ls 一樣嗎?
完全一樣。docker ps、docker container ls、docker container list、docker container ps 都是同一個指令。
STATUS 中的 Exited (0) 和 Exited (1) 有什麼不同?
括號中是結束代碼。0 表示程式正常結束,非 0 表示出錯,137 表示被強制終止(例如記憶體不足)。用 docker logs 查看原因。
更新於 2026年10月14日