首页 > 解决方案 > 是否可以让 Docker 容器从不使用卷的主机文件系统中读取文件?

问题描述

我在一个容器中有一个 Python 脚本,它需要不断地读取位于主机文件系统上的文件中的变化值。使用卷来挂载文件将不起作用,因为那只会捕获当时文件中值的快照。我知道这是可能的,因为node_exporter 容器能够使用 Golang 中的自定义方法读取主机文件系统上的文件。有谁知道实现此目的的一般方法?

标签: pythondockerfilesystemsdocker-volumeprometheus-node-exporter

解决方案


我有一个 Python 脚本 [...] 需要不断读取位于主机文件系统上的文件中的变化值。

运行它。大多数 Linux 系统都预装了 Python。你在这里不需要 Docker。如果您的应用程序具有需要安装的 Python 库依赖项,则可以使用 Python 虚拟环境等工具。

是否可以让 Docker 容器从不使用卷的主机文件系统中读取文件?

你需要某种挂载,也许是绑定挂载docker run -v /host/path:/container/path image-name. 确保在执行此操作时不要覆盖映像中的应用程序代码,因为挂载将完全隐藏底层映像中的任何内容。

如果没有绑定挂载,您根本无法访问主机文件系统。这种文件系统隔离是 Docker 的一个关键特性。

... [Prometheus] node_exporter 容器...

从问题中的 GitHub 链接阅读,“不建议将其部署为 Docker 容器,因为它需要访问主机系统。” 那里的docker run示例使用绑定挂载来访问整个主机文件系统,绕过 Docker 的文件系统隔离。


推荐阅读