如果我在容器运行时删除绑定(bind)挂载文件会发生什么?
我正在使用在容器上运行的 grafana 镜像,并且我指定了绑定(bind)安装
volumes:
- ./data/grafana:/var/lib/grafana
但是当我在容器运行时删除目录/data/grafana/时,我仍然可以找到我的仪表板和数据,除非我重新启动容器,这是正常情况下找不到任何东西
我的问题是主机文件上的任何更改都会立即更新到容器文件上?
最佳答案
大多数 Linux/Unix 文件系统的工作方式是,当您删除文件或目录时,您实际上所做的就是删除查找表中将文件名映射到 inode 的条目。
当应用程序打开文件时,它使用查找表来查找 inode ,从那时起,所有操作都将在该 inode 上进行。因此,如果应用程序打开了一个文件并且您将其删除,该应用程序将继续正常工作并能够读取/写入该文件。一旦应用程序关闭,将无法再次访问该 inode ,因此对(现已删除)文件的任何更改都将丢失。
这同样适用于绑定(bind)安装。当您删除目录时,容器仍然拥有代表基目录的 inode 的有效句柄,并将继续正常工作,直到容器被销毁。
关于docker - 如果我在容器运行时删除绑定(bind)挂载文件会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64570703/