在 docker run 的時候使用 -v 或是 --volume 參數可以將 docker 容器掛載磁碟區,讓 docker 內的資料儲存到外部的本機位置,就算容器關閉後資料依然存在。
那萬一今天資料不想要了,該如何刪除呢?
這樣在關閉 docker compose 的同時就會順便將 volume 刪掉了
通常使用 volume 時會將本機的某個資料夾和容器內的某個資料夾做「關聯」。 其實刪除 volume 是刪除 docker 容器和外部資料的「關聯」資料,類似刪除連結,並且因為關聯被刪除,所以容器內的資料也就不存在了。不過如果沒有特別刪除,則本機的資料還會存在。如果只有刪除 volume ,並且之後 docker run 時 volume 又設定相同的位置,就會發現之前的資料又回來了,所以確定要刪除後記得把本機的資料也刪除。
參考資料:
docker docs - docker run
docker docs - docker compose down
docker docs - docker volume inspect
那萬一今天資料不想要了,該如何刪除呢?
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
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com