Docker -v | volume 掛載宿主機目錄導致容器內文件被覆蓋問題


當我們使用docker run -v /host/something:/container/something嘗試掛載默寫目錄到容器內時,期待的效果是容器內的文件和本地目錄的文件相互映射,但實際效果宿主機目錄會直接覆蓋掉容器內的目錄,但容器內文件並非被刪除,這個后面會討論到。

本文觀點主要參看如下文章,因為國內少有討論volume掛載覆蓋問題,故簡翻記錄核心要義。

容器內的文件被刪除了嗎?

都按時否定的,容器的鏡像自帶的文件並沒有被重寫覆蓋,而是被隱藏了,原理類似於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM