PHP,DDD,CQRS,Event Sourcing,Kubernetes,Docker,Golang

0%

Docker挂载单个文件时,在宿主机修改内容时产生的问题

问题现象:当docker将宿主机上的一个文件直接挂载到容器内时,在宿主机上修改该文件的内容后,在容器中看到该文件内容不变,或者容器中该文件不见了。

这个问题的大致原因是文件系统的问题。当你使用一些编辑器时(我这使用的是PHPStorm)你对文件做的修改不会直接保存该文件,而是创建一个新文件并保存到该位置。

这样的话就破坏了volume的挂载绑定,因为挂载绑定是基于文件系统的inode,因为我们前面讲的编辑器的行为改变了inode,所以宿主机上内容的改变不会同步到容器内。

你可以尝试一下在宿主机上使用记事本对内容进行修改,结果容器内的文件内容会如同我们预期的被修改了。所以根据这个问题的原因来看,如果你的编辑器在保存时会新建文件并覆盖原文件这样的操作,那么你可能先要看看能否对编辑器进行配置,取消这种保存方式。比如我使用的PHPStorm(当然JetBrains家族的编辑器都有些类似,你也可以参考),通过[File] - [Settings] - [System Settings] 中,找到Use "safe write"(save changes to a temporary file fisrt)这个选项,把前面的勾去掉即可,通过该选项的注释你可能也看懂是什么作用了吧。

当然,你也可以选择直接挂载文件夹而不是挂载单个文件来避免这个问题。

具体内容可见:https://github.com/moby/moby/issues/15793