目錄
docker volume 指令:建立、列出、檢查、刪除 Volume
docker volume 管理 Volume。Volume 的概念與用法見 Volume 與資料保存。
子指令
| 指令 | 說明 | 常用參數 |
|---|---|---|
docker volume create [名稱] | 建立 Volume(不給名稱會產生隨機名稱) | --label 鍵=值、-d 驅動程式、-o 選項 |
docker volume ls | 列出 Volume | -f 篩選、-q 只列名稱、--format |
docker volume inspect 名稱 | 顯示詳細資訊 | -f 範本 |
docker volume rm 名稱... | 刪除 Volume(使用中的不能刪) | -f |
docker volume prune | 刪除未使用的匿名 Volume | -a 包含具名的、-f 不確認、--filter |
docker volume ls -f 的篩選條件:dangling=true(沒有被任何容器使用)、name=部分名稱、label=鍵=值、driver=local。
建立、寫入、讀取
$ docker volume create mydata
mydata
$ docker volume ls
DRIVER VOLUME NAME
local 2bc47e5efc92fb9cbc751a0d25853c6c800d4e4806c256fb7d68fa9dff112fcd
local 6729482c30a3f652c14f542c6f341c811f087fc9626efcfdf00a49a5ae721e2c
local 78297657b68403b39f39940496ce3faf49e6257a11d5103d043077a36261236a
local a23af26d1da49e018edecb6e29f9be3875fb02e8c50510a40fbb5cf49da94f81
local mydata
$ docker volume inspect mydata
[
{
"CreatedAt": "2026-10-13T05:28:56Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mydata/_data",
"Name": "mydata",
"Options": null,
"Scope": "local"
}
]
$ docker run --rm -v mydata:/data alpine:3.23 sh -c "echo saved > /data/a.txt"
$ docker run --rm -v mydata:/data alpine:3.23 cat /data/a.txt
saved
ls中除了mydata,還有幾個長串名稱的匿名 Volume,是先前的容器留下的(例如postgres映像檔的VOLUME宣告自動建立的)。inspect的Mountpoint是資料在 Docker 主機上的實際位置。- 兩個不同的容器先後掛載
mydata,第二個讀到了第一個寫入的檔案:資料在 Volume 中,與容器無關。
找出並清理懸空的 Volume
$ docker run --rm -v /tmpdata alpine:3.23 true
$ docker volume ls -f dangling=true
DRIVER VOLUME NAME
local 2bc47e5efc92fb9cbc751a0d25853c6c800d4e4806c256fb7d68fa9dff112fcd
local 6729482c30a3f652c14f542c6f341c811f087fc9626efcfdf00a49a5ae721e2c
local 78297657b68403b39f39940496ce3faf49e6257a11d5103d043077a36261236a
local a23af26d1da49e018edecb6e29f9be3875fb02e8c50510a40fbb5cf49da94f81
local mydata
$ docker volume prune -f
Deleted Volumes:
a23af26d1da49e018edecb6e29f9be3875fb02e8c50510a40fbb5cf49da94f81
6729482c30a3f652c14f542c6f341c811f087fc9626efcfdf00a49a5ae721e2c
78297657b68403b39f39940496ce3faf49e6257a11d5103d043077a36261236a
2bc47e5efc92fb9cbc751a0d25853c6c800d4e4806c256fb7d68fa9dff112fcd
Total reclaimed space: 348.9MB
-v /tmpdata只寫容器內的路徑、沒有名稱,會建立一個匿名 Volume;--rm刪除容器時會一併刪除它。dangling=true列出所有目前沒有容器使用的 Volume,包括具名的mydata。prune -f只刪除了匿名的 4 個,回收 348.9 MB;具名的mydata被保留。
標籤
$ docker volume create --label env=dev tagged
tagged
$ docker volume ls -f label=env=dev
DRIVER VOLUME NAME
local tagged
$ docker volume rm mydata tagged
mydata
tagged
為 Volume 加上標籤,方便依專案或環境篩選與清理,例如 docker volume prune --filter label=env=dev。
相關章節
動手練習
練習:建立一個標籤為 project=demo 的 Volume,再用一個指令刪除所有帶這個標籤、且沒有被使用的 Volume(包括具名的)。
答案
docker volume create --label project=demo demo_data
docker volume prune -a -f --filter label=project=demo
-a 讓具名 Volume 也納入刪除範圍,--filter 限定只刪帶這個標籤的。
常見問題
一定要先 docker volume create 嗎?
不用。docker run -v 名稱:/路徑 使用不存在的 Volume 時會自動建立。先建立的好處是可以加上標籤或驅動程式選項。
docker volume prune 會刪掉我的資料庫嗎?
Docker 23 之後,docker volume prune 只刪除**沒有被任何容器使用的匿名 Volume**,具名的不會刪。docker volume prune -a 才會刪除未使用的具名 Volume,實測見 [清理硬碟空間](/zh-tw/docker/cleanup/)。
怎麼備份 Volume?
用一個臨時容器同時掛載 Volume 和主機資料夾,用 tar 打包,範例見 [Volume 與資料保存](/zh-tw/docker/volumes/)。
更新於 2026年10月14日