问题现象:当docker将宿主机上的一个文件直接挂载到容器内时,在宿主机上修改该文件的内容后,在容器中看到该文件内容不变,或者容器中该文件不见了。
这个问题的大致原因是文件系统的问题。当你使用一些编辑器时(我这使用的是PHPStorm)你对文件做的修改不会直接保存该文件,而是创建一个新文件并保存到该位置。
这样的话就破坏了volume的挂载绑定,因为挂载绑定是基于文件系统的inode,因为我们前面讲的编辑器的行为改变了inode,所以宿主机上内容的改变不会同步到容器内。
你可以尝试一下在宿主机上使用记事本对内容进行修改,结果容器内的文件内容会如同我们预期的被修改了。所以根据这个问题的原因来看,如果你的编辑器在保存时会新建文件并覆盖原文件这样的操作,那么你可能先要看看能否对编辑器进行配置,取消这种保存方式。比如我使用的PHPStorm(当然JetBrains家族的编辑器都有些类似,你也可以参考),通过[File]
- [Settings]
- [System Settings]
中,找到Use "safe write"(save changes to a temporary file fisrt)
这个选项,把前面的勾去掉即可,通过该选项的注释你可能也看懂是什么作用了吧。
当然,你也可以选择直接挂载文件夹而不是挂载单个文件来避免这个问题。