Docker容器獲取宿主機信息

最近在做產品授權的東西,開始宿主機為Window,程序獲取機器硬件信息相對簡單些,后來部署時發現各種各樣的的環境問題,所有后來改用dokcer部署,docker方式獲取宿主機信息時花了些時間,特此記錄一下docker 獲取宿主機的信息// dmidecode -t 4 | grep ID | tail -1 // CPUID// 系統// dmidecode -s system-serial-number // 查看系統序列號// dmidecode -s system-uuid // 查看系統UUID// dmidecode -s system-product-name//查看服務器系統型號// dmidecode -s processor-manufacturer | tail -1 // 處理器廠家// 主板// dmidecode -s baseboard-product-name // 主板型號// dmidecode -s baseboard-serial-number // 主板序列號// dmidecode -s baseboard-manufacturer // 主板廠家實際項目當中,我獲取了CPUID、系統序列號、系統UUID、系統型號、處理器廠家,之所有獲取這么多信息標識機器 , 是考慮到有些信息在某些系統可能為空,而且CPUID也不唯一了,所以就多獲取些 。
調查下來 , docker 獲取宿主機信息大體可以通過三種方式

  • 通過環境變量由外部傳入容器內
  • 使用掛載宿主機目錄方式
  • 在容器中使用ssh連接到主機
一:通過環境變量由外部傳入容器內大體思路是docker 支持通過-e來傳遞參數到容器內部程序,就像安裝docker-mysql那樣密碼可以通過參數傳遞一樣
  • 在DockeFile中增加環境變量配置節點 (此步驟主要用來設置參數默認,也可以省略,通過其它方式設置)
  • 在程序啟動時應用獲取程序變量并應用
  • 在docker run 時通過-e參數傳遞到容器中
二:使用掛載宿主機目錄方式確保宿主機能執行dmidecode命令(必須)
【Docker容器獲取宿主機信息】將宿主機的如下兩個目錄掛載到容器中
// dmidecode程序的目錄 , 如果不掛載那么容器中識別不了dmidecode命令/usr/sbin/dmidecode或者/sbin/dmidecode// dmidecode調用時會使用到mem這個文件,如果不掛載會找不到文件/dev/mem在容器啟動時增加 --privileged = true參數,讓容器獲得近似于宿主機root的權限
三:在容器中使用ssh連接到主機思路:在docker容器內安裝ssh,sshpass服務,通過ssh連接到宿主機執行命令 , 獲 取宿主機信息(必須知道宿主機Ip和密碼)
步驟:
  • 安裝服務 yum -y install openssh-server
  • 修改配置 vim /etc/ssh/sshd_config PermitRootLogin的值修改為yes保存退出
  • 啟動ssh服務 systemctl start sshd.service
  • 設置開機啟動 systemctl enable sshd.service
  • 安裝sshpass yum -y install sshpass
參考信息 :https://blog.csdn.net/qq_42910468/article/details/121387411
https://blog.csdn.net/weixin_42173451/article/details/123085460

    推薦閱讀