私はファンを制御できるRaspberry Pi 4用の小さなASP.NET Coreアプリを構築しました(ねえ)。このアプリケーションは、Raspiベアメタルで実行される小さなスタンドアロンのLinuxアプリケーションとしてデプロイされます。
温度を測定するためにvcgencmd measure_temp
Raspiに電話したところ、実際の温度が出ました。
私はさまざまな理由でこのアプリケーションを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.so
?ldd
次の方法で知ることができます。
$ 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
コンテナ内で正常に実行しました。