在 Docker 容器中獲取 Raspi 的 CPU 溫度
我為我的 Raspberry Pi 4 建構了一個小的 ASP.NET Core 應用程序,它可以讓我控制風扇(請參見此處)。該應用程序部署為在我的 Raspi 裸機上執行的小型獨立 Linux 應用程序。
為了測量溫度,我打電話
vcgencmd measure_temp
給 Raspi,它給了我實際的溫度。由於各種原因,我更喜歡在 Docker 容器中執行這個應用程序:
- 在 Linux 中不再需要手動註冊服務,Docker 功能可以
--restart-always
處理這個問題。- 無需再從 GitHub 下載最新版本、提取應用程序並將其標記為執行檔。
但我不知道如何從容器中檢索 Raspi 的溫度。
我已經嘗試將 Raspi 的目錄映射到 Docker 容器中並從內部呼叫
/usr/bin/
-但由於缺少依賴項而失敗。 我已經在 Stack Overflow 上找到了一個答案,建議在 Raspi 上創建一個命名管道,然後從容器中使用這個管道。但是,如果我必須設置類似命名管道的東西,這會消除容器的美感。/opt/vc/bin/``vcgencmd
長話短說:有沒有辦法從 Docker 容器中獲取 Raspi 目前的 CPU 溫度?
謝謝!
如果我們只是安裝
/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
想要兩個可以在/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
in/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
在一個容器內執行。