Docker -v | volume 掛載宿主機目錄導致容器內檔案被覆蓋問題
阿新 • • 發佈:2021-12-08
當我們使用docker run -v /host/something:/container/something
嘗試掛載默寫目錄到容器內時,期待的效果是容器內的檔案和本地目錄的檔案相互對映,但實際效果宿主機目錄會直接覆蓋掉容器內的目錄,但容器內檔案並非被刪除,這個後面會討論到。
本文觀點主要參看如下文章,因為國內少有討論volume掛載覆蓋問題,故簡翻記錄核心要義。
- http://container-solutions.com/understanding-volumes-docker/
- http://www.alexecollins.com/docker-persistence/
容器內的檔案被刪除了嗎?
都按時否定的,容器的映象自帶的檔案並沒有被重寫覆蓋,而是被隱藏了,原理類似於linux mount
目前解決辦法
使用docker volume create
建立,這種方法建立的是資料卷
,而通過在建立容器時將主機本地任意路徑掛載到容器作為資料卷的方式稱為繫結資料卷
。
當我們需要將容器內檔案對映,或者說是同步至宿主機的的資料夾裡的時候,就可以通過資料卷的方式,具體指令如下:
docker run -it --name somename -v volume-name:/container-src anyimage /bin/bash #資料卷的兩種方式 具名掛載: 指的是volume-name,主要不要新增`/`路徑符,新增路徑符則表示使用的是上文中繫結資料卷的方式,使用繫結資料卷是,宿主機路徑必須是絕對路徑. 匿名掛載: 指的是-v 後面只有/container-src,這樣容器目標路徑會掛載在隨機名的volume上. # 可以檢視具體的volumen列表 docker volume ls