【问题标题】:what will happen if i delete my bind mount file while the container is running?如果我在容器运行时删除绑定挂载文件会怎样?
【发布时间】:2020-10-28 10:14:01
【问题描述】:
如果我在容器运行时删除绑定挂载文件会发生什么?
我正在使用在容器上运行的 grafana 映像,并且我指定了绑定挂载
volumes:
- ./data/grafana:/var/lib/grafana
但是当我在容器运行时删除目录 /data/grafana/ 时,我仍然可以找到我的仪表板和我的数据,除非我重新启动容器,这很正常,找不到任何东西
我的问题是主机文件的任何更改都会立即在容器文件上更新?
【问题讨论】:
标签:
docker
docker-compose
dockerfile
grafana
docker-volume
【解决方案1】:
大多数 Linux/Unix 文件系统的工作方式是,当您删除文件或目录时,您实际上所做的只是删除查找表中将文件名映射到所谓的 inode 的条目。
当应用程序打开一个文件时,它使用查找表来查找 inode,然后所有操作都参与到该 inode 上。因此,如果应用程序打开了一个文件并且您将其删除,该应用程序将继续正常工作并能够读取/写入该文件。应用程序关闭后,将无法再次访问该 inode,因此对(现已删除的)文件所做的任何更改都将丢失。
这同样适用于绑定安装。当你删除目录时,容器仍然有一个代表基目录的 inode 的有效句柄,并且会继续正常工作,直到容器被销毁。