我有一个配置文件在运行时使用只读卷注入到 Docker 中。因此容器无法更改配置文件的内容,但主机可以。这个想法是向容器内的进程发送 SIGHUB 以重新加载任何配置更改。然而,Docker 似乎无法检测到配置文件的任何更改,并且似乎看到了容器启动时文件的冻结快照。
这是 Docker 的预期行为吗?
docker 用于主机卷的绑定挂载将 inode 映射到第二个位置。 inode 是 Linux 中指向文件或目录的指针。大多数编辑器的标准过程不是就地修改文件,而是使用新的 inode 创建一个临时文件,然后用具有新 inode 的文件替换现有文件。这可以避免崩溃导致文件处于部分写入状态的损坏。你应该看到这种情况发生ls -i
在文件上。
对于绑定挂载,这意味着即使主机看到包含新内容的文件,您仍然可以绑定挂载到原始 inode。您可以通过以下任一方法解决该问题:
- 绑定挂载整个文件夹而不是仅挂载文件
- 重新创建容器以获取新的更改(重新启动也可能有效)
- 编辑文件而不更改 inode
对于后者,命令如下echo new line >>file
or cat tmp-file >file
将保持相同的索引节点file
。您也可以找到编辑器的设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)