Docker 刪除 Volume

在 docker run 的時候使用 -v 或是 --volume 參數可以將 docker 容器掛載磁碟區,讓 docker 內的資料儲存到外部的本機位置,就算容器關閉後資料依然存在。

那萬一今天資料不想要了,該如何刪除呢?

docker

查看所有 volume

    
docker volume ls
    

    
docker volume ls
DRIVER    VOLUME NAME
local     a9da5ab3a0c8d81bf6c2297b6813777531c059ba42c4eb7d4d52b64e603134e6
local     b30b33914f818d4cb57b35c562006a246dedd0fe10ef44e507863aa1f3854827
local     docker-elk_elasticsearch
local     fe4625388d76d1bf05074955e659680d85a76b304de78a9a608bcfb3b3a69cf2
    

查看 volume 詳細資料

    
docker volume [VOLUME_NAME]
    

    
docker volume inspect a9da5ab3a0c8d81bf6c2297b6813777531c059ba42c4eb7d4d52b64e603134e6
[
    {
        "CreatedAt": "2023-04-10T15:40:00Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/a9da5ab3a0c8d81bf6c2297b6813777531c059ba42c4eb7d4d52b64e603134e6/_data",
        "Name": "a9da5ab3a0c8d81bf6c2297b6813777531c059ba42c4eb7d4d52b64e603134e6",
        "Options": null,
        "Scope": "local"
    }
]
    

查看指定容器的 volume

    
docker inspect -f '{{ .Mounts }}' [CONTAINER_ID]
    

    
docker inspect -f '{{ .Mounts }}' 3ea11f589e06
[{bind  C:\Users\ruyut\Documents\docker\TeamCity\data /data/teamcity_server/datadir   true rprivate} {bind  C:\Users\ruyut\Documents\docker\TeamCity\logs /opt/teamcity/logs   true rprivate} {volume fe4625388d76d1bf05074955e659680d85a76b304de78a9a608bcfb3b3a69cf2 /var/lib/docker/volumes/fe4625388d76d1bf05074955e659680d85a76b304de78a9a608bcfb3b3a69cf2/_data /opt/teamcity/temp local  true }]
    

刪除 volume

記得先停止容器再刪除
    
docker volume rm [VOLUME_NAME]
    

docker compose

如果是使用 docker compose 執行的話非常簡單,關閉時直接附加 -v 參數即可:
    
docker compose down -v
    

這樣在關閉 docker compose 的同時就會順便將 volume 刪掉了

為什麼刪掉 volume 再重新掛載後資料沒有刪除?

雖然刪除 volume 、docker 容器也刪掉了,然後再次執行,為什麼以前的資料又回來了呢?是不是沒有刪除成功?
通常使用 volume 時會將本機的某個資料夾和容器內的某個資料夾做「關聯」。 其實刪除 volume 是刪除 docker 容器和外部資料的「關聯」資料,類似刪除連結,並且因為關聯被刪除,所以容器內的資料也就不存在了。不過如果沒有特別刪除,則本機的資料還會存在。如果只有刪除 volume ,並且之後 docker run 時 volume 又設定相同的位置,就會發現之前的資料又回來了,所以確定要刪除後記得把本機的資料也刪除。

參考資料:
docker docs - docker run
docker docs - docker compose down
docker docs - docker volume inspect

留言