
システムの状態に関する情報を Web ページに表示する Docker コンテナを構築しています。
PHP-fpm と NGINX コンテナを実行しています。 またはを使用するとshell_exec
、exec
作成した .sh スクリプトが検出され、実行されます。
hddtemp
ただし、との出力は表示されません(lm-)sensors
。これは、これらが PHP コンテナ内に存在しないためであると考えられます。
これを修正する適切な方法は何でしょうか?
- 同僚は Linux では「すべてがファイル」だと言いましたが、これらのアプリケーションを php-fpm コンテナにマウントするだけでは動作しないと思います。また、かなりハッキーな感じがしますし、php-fpm コンテナは同じ OS ではない可能性があり、要件を満たしていないか、または「センサー セットアップ」を実行できない可能性があります。
- もちろん、これらのアプリをメイン OS で実行し、結果を定期的にファイルに書き込んで、それをコンテナーにマウントすることもできます。しかし、これもまた、Docker の目的に反するのではないでしょうか。
- 独自の PHP-fpm バージョンを作成することもできますが、そうすると PHP が更新されるたびにこれを再作成する必要があることになりますか? これもハックのように聞こえます。
では、これを行う適切な方法は何でしょうか (上記のいずれかである必要はありません)。
現在、私は次の「実用的な解決策」を持っています:
(Docker の作成)
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 を「特権」モードで実行する必要があります。これは間違っているような気がしますが、ディスク情報にアクセスする必要があるのでしょうか?
答え1
不足しているのはコマンドではありません。コマンドのコピーをコンテナに入れることができます。あるいは同等のものを入れることができます。不足しているのは、必要な情報へのアクセスです。
/proc
これをホストからコンテナにマウントして追加できます。注意してください。これにより、すべての隔離が解除されます。読み取り専用でマウントし、hidepid=2 にすることもできます。他のオプションもあるかもしれません。