这是我在 docker 论坛中创建的帖子的副本。因此,一旦这个问题得到解决,我将关闭这个/另一个。但由于docker论坛没有人回答,而且我的问题仍然存在,所以我会再次发布,期待得到答案。
我想将服务器监控应用程序公开为 Docker 容器。我编写的应用程序依赖于 /proc 来读取 CPU 利用率或磁盘统计信息等系统信息。因此,我必须将主机 /proc 虚拟文件系统中提供的信息转发到我的 docker 容器。
所以我制作了一个简单的图像(使用 docker 网站上的第一个或第二个介绍:链接)并启动它:
docker run -v=/proc:/host/proc:ro -d hostfiletest
Run Code Online (Sandbox Code Playgroud)
假设正在运行的容器可以从 /host/proc 读取以获取有关主机系统的信息。
我启动了容器内的控制台来检查:
docker exec -it {one of the funny names the container get} bash
Run Code Online (Sandbox Code Playgroud)
并检查了/host/proc 的内容。
检查它的最简单方法是获取 /host/proc/sys/kernel/hostname 的内容 - 这应该会产生我正在处理的虚拟机的主机名。但我获得了容器的主机名,而 /host/proc/uptime 则让我获得了虚拟机的正确正常运行时间。
我在这里错过了什么吗?也许是一些概念性的东西?
Docker 版本 17.05.0-ce,内部版本 89658be 在 Linux 4.4.0-97-generic (VM) 上运行
更新:
我发现了几篇文章描述了如何使用我上面提到的相同方法在容器内运行特定的监控应用程序。
更新:
刚刚尝试使用现有的 Ubuntu 映像 - 相同的行为。以特权方式运行映像并使用 pid=host 没有帮助。
问候皮皮