目錄

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日