docker - 如果我在容器运行时删除绑定(bind)挂载文件会发生什么?

标签 docker docker-compose dockerfile grafana docker-volume

如果我在容器运行时删除绑定(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/

相关文章:

Dockerfile返回在构建中找不到的npm

Docker:如何将容器内的 IP 重定向到另一个 IP

RHEL 上的 Docker CE - 需要 : container-selinux >= 2. 9

带有文件夹通配符的 Docker COPY

docker - 如何在 docker-compose.yml 中设置/获取项目名称

spring-boot - Docker 容器中的 Spring Cloud Config 无法访问

docker - Visual Studio 2017 Docker - 更改多阶段构建的目标

node.js - 当我尝试在 localstack 中使用 aws ses 时未验证电子邮件地址

docker - Skaffold运行无法找到指定的Dockerfile

docker - docker-compose端口未公开