docker掛載單文件問題


關於docker中文件夾掛載成功 但是單文件掛載卻沒有生效的問題

因為用vim修改這里會有一個坑

docker -v mount 的機制:
-v mount 文件(或文件夾)時,docker 記錄的是該文件的 inode,並用 inode 追蹤。當用 vim 編輯了文件后,這個文件的 inode 就變了,也就是說這個 default.conf 文件已經不是運行 docker run 時的那個 default.conf 文件了,容器中自然也就沒了新的改動。 同時該 issue 的 opener 使用的是 sed -i 修改,也會使 inode 發生變化,sed -i 的機制是創建一個新的臨時文件,修改完后在重命名。對此,官方的建議是掛載文件夾,而不是文件。
https://github.com/moby/moby/issues/6011

上面這段參考:https://www.dazhuanlan.com/2020/01/02/5e0d7cfd57df8/

經測試發現,我掛載單文件的nginx的container,沒重啟之前修改掛載的單文件沒有生效,但重啟之后修改的配置文件確實會更新,對於nginx來說配置更新本身就需要重啟,所以掛載文件其實也可以。但對於那些需要修改單文件但又想不重啟container就可以實現更新的情況可以考慮掛載文件夾。我這里改為掛載文件夾。

//這里是掛載單文件,有坑,宿主機改配置后容器中配置沒有修改,后面是掛載目錄方式
root@Colin:~/web2# docker run --name web2 -d -p 80:80 --net host -v $(pwd)/config/html:/usr/share/nginx/html -v $(pwd)/config/conf/nginx.conf:/etc/nginx/nginx.conf -v $(pwd)/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v $(pwd)/config/logs:/var/log/nginx fansolomon/my-nginx

//先將文件從web2 container(我之前運行的一個nginx容器)相關配置文件copy到本地機config目錄下,html目錄也是同理,還有需要新建logs目錄
root@Colin:~/web3# docker cp web2:/etc/nginx config

//完成copy后目錄如下
root@Colin:~/web3/config# ls
html  logs  nginx
root@Colin:~/web3/config/nginx# ls
conf  conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf

//然后重新建立一個web3 container,將單文件掛載改為目錄掛載!
root@Colin:~/web3# docker run --name web3 -d -p 80:80 --net host -v $(pwd)/config/html:/usr/share/nginx/html -v $(pwd)/config/nginx:/etc/nginx -v $(pwd)/config/logs:/var/log/nginx fansolomon/my-nginx

//再修改宿主機web3文件夾中的config中配置,可以看到容器中的配置跟着更新了,成功
//進入/usr/sbin/后進行reload重新加載配置文件 可以看到修改已經生效

 


免責聲明!

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



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