背景
某次修改宿主机挂载到 docker 容器上的文件内容后,在容器内查看文件内容出现错误
英文环境:stale file headle
中文环境:文件句柄失效
后面经过测试,还可能出现文件内容不一致,容器内的没有同步修改
原因
经过检索后,确定了问题:docker 挂载文件时,并不是挂载了某个文件的路径,而是挂载了文件的inode 某些编辑器(vi)在编辑保存文件时,采用了备份、替换的策略,即编辑过程中,将变更写入新文件,保存时,再将备份文件替换原文件,此时会导致文件的inode发生变化。原inode对应的文件其实并没有发生修改。
解决办法
- 避免使用 vim ,它会执行这种策略,或者设置 backupcopy=yes
- 文件权限修改为 666 或者 777, vim 则会保持 inode 不变
经过测试,及时没有使用上面的方法, vim 不是都会修改 inode 号,目前还没有发现规律(什么时候才会更换 inode),但为了保险,建议后续修改文件的时候都按照要求
评论