docker挂载文件宿主机与容器内部数据不同步问题
问题描述:使用-v将宿主机的文件挂载到容器,在宿主机中修改文件,或者通过cp等方式改变文件数据的时候,进入到容器中查看挂载的文件,发现文件数据并没有发生改变,此时会产生挂载文件在宿主机和容器中不同步的现象
问题分析:通过查阅资料可知,docker在进行文件挂载时,并不是仅仅挂载文件名到对应位置,而是将文件对应的inode 进行映射。用vim进行文件的编辑并保存时,系统采用的是备份、替换的策略,文件用vim等工具编辑的过程实质是,备份原来的文件,当新文件编辑完成后,再将新文件替换文原件,这会导致文件的inode变化,所以docker内外的文件并不会同步。而用echo等重定向操作修改文件时,文件的inode保持不变,所以不会发生类似现象。
问题解决思路:
1,每次修改文件后,重启容器使数据同步
2,通过echo、cat重定向的方式修改文件内容
3,挂载文件夹,避免直接挂载文件