原文地址:https://lrita.github.io/2017/08/18/mount-volume-to-docker-and-modify-from-host/
在啓動docker
容器時,爲了保證一些基礎配置與宿主機保持同步,通常需要將這些配置文件掛載進docker
容器,例如/etc/resolv.conf
//etc/hosts
//etc/localtime
等。
當這些配置變化時,我們通常會修改這些文件。但是此時遇到了一個問題:
當在宿主機上修改這些文件後,docker
容器內查看時,這些文件並未發生對應的修改。
然後通過查閱相關資料,發現該問題是由docker -v
掛載文件和某些編輯器存儲文件的行爲共同導致 的。
- docker 掛載文件時,並不是掛載了某個文件的路徑,而是實打實的掛載了對應的文件,即掛載了某 個指定的
inode
文件。 - 某些編輯器(vi)在編輯保存文件時,採用了
備份、替換
的策略,即編輯過程中,將變更寫入新文件, 保存時,再將備份文件替換原文件,此時會導致文件的inode
發生變化。 - 原
inode
對應的文件其實並沒有發生修改。
因此,我們從宿主機上修改這些文件時,應該採用echo
重定向等操作,避免文件的inode
發生變化。
附 inode:
http://www.ruanyifeng.com/blog/2011/12/inode.html
通過 inode 這篇文章能很好的理解 Linux 的軟鏈接和硬鏈接