我正在构建一个 docker 容器,它应该在网页上显示有关系统状态的信息。
我正在运行 PHP-fpm 和 NGINX 容器。如果我使用shell_exec
或exec
我制作的 .sh 脚本被发现并执行。
但是,它不显示hddtemp
和的输出(lm-)sensors
。很可能是因为 PHP 容器中不存在这些。
解决这个问题的正确方法是什么?
- 我的同事说,在 Linux 中,“一切都是文件”,但我不认为我可以将这些应用程序安装在 php-fpm 容器中并期望它们能够工作。这听起来也很老套,并且 php-fpm 容器可能不是相同的操作系统,未满足要求,否则我将无法执行“传感器设置”。
- 当然,我可以在主操作系统上运行这些应用程序,并将结果写入文件,然后将其安装到容器中。但再说一遍;这违背了 docker 的目的吗?
- 我想我可以创建我自己的 PHP-fpm 版本,但这意味着每次 php 有更新时我都必须重新创建它?这听起来也有点像黑客。
那么,执行此操作的正确方法是什么(不一定是上述任何一种)。
目前我有以下“工作解决方案”:
(码头工人组成)
php:
image: php:7-fpm
privileged: true
volumes:
- /usr/sbin/hddtemp:/usr/sbin/hddtemp
- /etc/hddtemp.db:/etc/hddtemp.db
(PHP)
var_dump(shell_exec("/usr/sbin/hddtemp /dev/sda 2>&1"));
然而;在这种情况下,我必须在docker中以“特权”模式运行PHP,我有点觉得这是错误的,但它需要访问diskinfo?
答案1
并不是缺少命令。您可以将命令的副本放入容器中。或者有等价的。缺少的是获取他们需要的信息。
/proc
您可以将其从主机添加到容器中。小心,因为这会打破所有的隔离。您可以将其挂载为只读,并且 hidepid=2。可能还有其他选择。