最近在做产品授权的东西,开始宿主机为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命令(必须)

将宿主机的如下两个目录挂载到容器中

  // 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

Docker容器获取宿主机信息的更多相关文章

  1. 如何让Docker容器随宿主机的启动而自动启动

    使用Docker容器部署服务时,不仅需要让服务随Docker容器的启动而启动,还需要让Docker容器随宿主机的启动而自动启动,为此Docker提供了Docker run的restart参数 #doc ...

  2. docker容器和宿主机之间复制文件

    https://blog.csdn.net/u012416928/article/details/55049063 https://blog.csdn.net/u011596455/article/d ...

  3. docker容器共享宿主机环境,从而为镜像体积减负

    一.背景介绍 响应公司技术发展路线,开发的服务均需要将打成docker镜像,使用docker进行统一管理.可是随着服务越来越多,镜像也越来越多.每次制作镜像的时候都需要将依赖打进容器,这样一个jre的 ...

  4. docker容器与宿主机的数据交互

    在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 方式一.Docker cp命令 docker cp :用于容器与主机之间 ...

  5. Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案

    docker 容器网络默认使用 bridge 桥接模式,正常情况下,容器会使用 daemon.json 中定义的虚拟网桥来与宿主机进行通讯. 最近更新 Docker for mac 之后,发现以前容器 ...

  6. 【docker】docker容器和宿主机之间文件互传,互相拷贝

    原文地址:https://www.cnblogs.com/areyouready/p/8973495.html [注意:命令中符号均为英文符号] 1.从容器里面拷文件到宿主机 答:在宿主机里面执行以下 ...

  7. 记一次自启动的docker容器将宿主机的开机用户登录界面覆盖事件

    宿主机的系统为CentOS7_7.7.1908,默认为GUI启动,安装了宝塔面板,docker-ce为最新版. 在启动了一个centos7的容器(镜像为centos官方镜像)后,将该容器重启策略设置为 ...

  8. Docker容器和宿主机互传文件

    1.docker容器向宿主机传送文件 格式: docker cp container_id:<docker容器内的路径> <本地保存文件的路径> 例: docker cp 10 ...

  9. docker容器与宿主机之间内容拷贝

    来自:http://blog.csdn.net/yangzhenping/article/details/43667785 常用的方式有3种: 从容器内拷贝文件到主机上 docker cp <c ...

随机推荐

  1. Java的基础语法01

    一. 注释,标识符,关键字 书写注释是一种习惯的养成,当我们一段代码完成后,长时间没有回顾,便会产生遗忘,所以注释是给我们写代码的人看的.1.注释 //单行注释 /*多行注释*/ /**文档注释也叫文 ...

  2. Java的学习日常

    当2020年10月进入大学,我选择了计算机专业,本想着自己会摒弃高中的不良习惯,认真学习.但随着和同学们的熟悉,自己的本性也逐渐暴露出来.两年懒散表现,让现在回过头的自己都不忍直视. 虽然在学习期间, ...

  3. jenkins多分支构建选择

    通常开发提交到git上的代码会有多个分支,比如master分支.release分支等,少则1.2个,多则10几20几个:当构建的时候,如果不配置多分支构建,每构建一个新的分支,就需要修改配置,如果没有 ...

  4. 网站加了CDN后,字体图标报错Access-Control-Allow-Origin

    这两天将自己做的网站(PM老猫)上线了,上线后发现因为之前购买的服务器带宽较小,第一次打开网站页面就会比较慢,想着给网站加了个CDN,让静态文件直接通过CDN访问.网上一找发现可以白嫖的CDN服务挺多 ...

  5. 王霸雄图荣华敝屣,谈笑间尽归尘土|基于Python3双队列数据结构搭建股票/外汇交易匹配撮合系统

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_192 如果你爱他,那么送他去股市,因为那里是天堂:如果你恨他,送他去股市,因为那里是地狱. 在过去的一年里,新冠疫情持续冲击世界经 ...

  6. WPF 截图控件之移除控件(九)「仿微信」

    WPF 截图控件之移除控件(九)「仿微信」 WPF 截图控件之移除控件(九)「仿微信」 作者:WPFDevelopersOrg 原文链接: https://github.com/WPFDevelope ...

  7. 2. 组复制技术架构 | 深入浅出MGR

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1. 传统主从复制技术架构 传统主从复制的方式是在master节点上执行数据更新事务,而后记录这些事务到binlog中,再 ...

  8. [原创] RestartPC64-中文版v1.0.0.9

    原来发布的RestartPC-中文版和英文版v1.0.0.5,在PE64下无效.所以重新编译了64位版的RestartPC64-中文版v1.0.0.9,可以在PE64下面.正常Win64系统下面重启关 ...

  9. WPF中使用System.Windows.Interactivity实现事件绑定的替代方法

    一.问题描述 对于 Button 等控件,在 MVVM 中我们能通过 Command 绑定解决 Click 事件.具体如下所示: <Button Margin="10" He ...

  10. Servlet特性研究之异步模式

    Servlet只有同步模型是怎样的? 异步处理是Servlet3.0版本的重要功能之一,分析异步处理模型之前,先看看同步处理的过程是怎样的: 客户端发起HTTP请求一个动态Servlet API,请求 ...