DockerコンテナからRaspiのCPU温度を取得します。

DockerコンテナからRaspiのCPU温度を取得します。

私はファンを制御できるRaspberry Pi 4用の小さなASP.NET Coreアプリを構築しました(ねえ)。このアプリケーションは、Raspiベアメタルで実行される小さなスタンドアロンのLinuxアプリケーションとしてデプロイされます。

温度を測定するためにvcgencmd measure_tempRaspiに電話したところ、実際の温度が出ました。

私はさまざまな理由でこのアプリケーションをDockerコンテナで実行することを好みます。

  • Linuxでは、手動サービス登録は不要になり、Docker機能は--restart-alwaysこれを処理します。
  • GitHubから最新バージョンをダウンロードし、アプリケーションを抽出し、実行可能ファイルとして表示する必要はなくなりました。

しかし、コンテナ内でRaspiの温度を取得する方法がわかりません。

RaspiのディレクトリをDockerコンテナ/usr/bin/にマップして内部で呼び出そうとしましたが、依存関係が欠落して失敗しました。 Raspiで名前付きパイプを作成し、コンテナ内でそのパイプを使用することを提案するStack Overflowの答えを見つけました。しかし、あえてネームドパイプのようなものを設置すると、コンテナの美しさを奪います。/opt/vc/bin/vcgencmd

簡単に言えば:Dockerコンテナ内でRaspiの現在のCPU温度を取得する方法はありますか?

ありがとうございます!

ベストアンサー1

/opt/vcコンテナ内に取り付けるだけで..

docker run -it --rm -v /opt/vc:/opt/vc debian:stretch /opt/vc/bin/vcgencmd measure_temp

...次のような場合は失敗します。

/opt/vc/bin/vcgencmd: error while loading shared libraries: libvchiq_arm.so: cannot open shared object file: No such file or directory

どこで見つけることができますかlibvchiq_arm.soldd次の方法で知ることができます。

$ ldd /opt/vc/bin/vcgencmd
        linux-vdso.so.1 (0x7efe7000)
        /usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so => /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so (0x76f79000)
        libvchiq_arm.so => /opt/vc/lib/libvchiq_arm.so (0x76f52000)
        libvcos.so => /opt/vc/lib/libvcos.so (0x76f39000)
        libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76f0f000)
        libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x76efc000)
        librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x76ee5000)
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76d97000)
        /lib/ld-linux-armhf.so.3 (0x76f8e000)

これはvcgencmd、で見つけることができる2つのライブラリが必要であることを示しています/opt/vc/lib。これらはすべて書くことができるしかし、コンテナ環境はそれがどこにあるのかわかりません/opt/vc/lib。次の設定でこの問題を解決できますLD_LIBRARY_PATH

docker run -it --rm -v /opt/vc:/opt/vc -e LD_LIBRARY_PATH=/opt/vc/lib debian:stretch /opt/vc/bin/vcgencmd measure_temp

失敗の理由は次のとおりです。

VCHI initialization failed

いいですね。ライブラリが見つからない問題を修正しました!vcgencmdコンテナで利用できないデバイスを探しているようです。vcgencmd次のホストの制御下で実行すると、これが何であるかを判断できますstrace

strace -o /tmp/trace  -f -s 80 /opt/vc/bin/vcgencmd measure_temp

/dev今すぐ検索して、/tmp/trace次を探します。

6868  openat(AT_FDCWD, "/dev/vchiq", O_RDWR|O_LARGEFILE) = 3

/dev/vchiqしたがって、コンテナの内部を露出させる必要があります。--device次のオプションを使用してこれを実行できます。

docker run -it --rm -v /opt:/opt -e LD_LIBRARY_PATH=/opt/vc/lib --device /dev/vchiq debian:stretch /opt/vc/bin/vcgencmd measure_temp

今報告してください:

temp=69.3'C

vcgencmdコンテナ内で正常に実行しました。

おすすめ記事