查看 docker 容器,必然要用到 docker ps 命令。其基本格式為:
docker ps [OPTIONS]
關鍵在於 OPTIONS(選項):

1
常見用法
1. 最常見的用法
$ docker ps
顯示當前正在運行的容器。
在 PORTS 一列,如果暴露的端口是連續的,還會被合並在一起,例如一個容器暴露了3個 TCP 端口:100,101,102,則會顯示為 100-102/tcp。
2. 顯示所有狀態的容器
$ docker ps -a
容器的狀態共有 7 種:created|restarting|running|removing|paused|exited|dead。
3. 顯示最后被創建的 n 個容器
$ docker ps -n 3
注意,這里不限狀態。
4. 顯示最后被創建的容器
$ docker ps -l
相當於 docker ps -n 1。
5. 顯示完整輸出
$ docker ps --no-trunc
即不會截斷輸出。該選項有點長,其中 trunc 算是 truncate 的縮寫。
6. 只顯示容器 ID
$ docker ps -q
清理容器時非常好用,filter 過濾顯示一節有具體實例。
7. 顯示容器文件大小
$ docker ps -s
該命令很實用,可以獲得 2 個數值:一個是容器真實增加的大小,一個是整個容器的虛擬大小。
查看源碼(https://github.com/moby/moby/blob/master/daemon/getsize_unix.go)后可知,容器虛擬大小 = 容器真實增加大小 + 容器鏡像大小。
2
高級用法
Filter 過濾顯示
如果容器數量過多,或者想排除干擾容器,可以通過 --filter 或 -f 選項,過濾需要顯示的容器。
當前支持的過濾條件非常豐富,包括:

條件雖多,但萬變不離其宗,只要再記住以下 3 條准則:
1. 選項后跟的都是鍵值對 key=value (可不帶引號),如果有多個過濾條件,就多次使用 filter 選項。例如:
docker ps --filter id=a1b2c3 --filter name=bingohuang
2. 相同條件之間的關系是或,不同條件之間的關系是與。例如:
docker ps --filter name=bingo --filter name=huang --filter status=running
以上過濾條件會找出 name 包含 bingo 或 huang 並且 status 為 running 的容器。
3. id 和 name,支持正則表達式,使用起來非常靈活。例如:
docker ps --filter name=^/bingohuang$
精確匹配 name 為 bingohuang 的容器。注意,容器實際名稱,開頭是有一個正斜線 / ,可用 docker inspect 一看便知。
docker ps --filter name=.*bingohuang.*
匹配 name 包含 bingohuang 的容器,和 --filter name=bingohuang 一個效果。
最后, 舉一個復雜點的例子,用於清理名稱包含 bingohuang,且狀態為 exited 或 dead 的容器:
docker rm $(docker ps -q --filter name=.*bingohuang.* --filter status=exited --filter status=dead2>/dev/null)
Format 格式化顯示
如果想自定義顯示容器字段,可以用格式化選項 --format 。
基於 Go template(https://golang.org/pkg/html/template/)語法,可用的占位符如下:

1. 當使用了 --format 選項,那么 ps 命令只會輸出 template 中指定的內容:
$ docker ps --format "{{.ID}}: {{.Command}}"
a87ecb4f327c: /bin/sh -c #(nop) MA
01946d9d34d8: /bin/sh -c #(nop) MA
c1d3b0166030: /bin/sh -c yum -y up
41d50ecd2f57:/bin/sh -c #(nop) MA
2. 如果想帶上表格列頭,需要再 template 中加上 table 指令:

