Docker容器中根据系统的UUID生成应用注册码

11 篇文章 0 订阅
6 篇文章 0 订阅

一般情况下,授权应用是通过统一的服务端进行管理授权的。但是由于我司是争对网络服务商提供应用技术支持的,服务器并不能连接到外网上,所以不能进行网络授权。所以需要根据服务器的唯一标识(如CPUID)进行注册码生成,但是如果把应用发布到Docker时,便获取不到宿主机的CPUID,这时我举例如下:

  • 在非Docker环境下获取注册码ID
/**
 - 获取linux/unix系统设备的CPUID
 - @return
 */
public static String getLinuxCpuId(boolean isReturnPrefix) {
       String result = "";       
       Runtime rt = Runtime.getRuntime();
       try {
           Process proc = rt.exec("dmidecode");
           InputStreamReader isr = new InputStreamReader(proc.getInputStream());
           BufferedReader br = new BufferedReader(isr);
           String line = null;
           boolean istest = false;
           while ((line = br.readLine()) != null) {
               if (line.toUpperCase().contains("Processor Information".toUpperCase())) {
                   istest = true;
               }
               if (istest && line.trim().toUpperCase().startsWith("ID:")) {
                   result = line.toUpperCase().trim().substring(3);
                   break;
               }
           }
           isr.close();
           result=result.trim();
           if(!"".equals(result)){
           	if(isReturnPrefix)
           		result="CPUID:"+result;   
           }
           result = result.replace(" ", "");
           return result;
       } catch (IOException e) {
       	logger.error("获取linux/unix系統cpuId发生异常。原因:",e);
       	return null;
       }
   }

如果要在Docker容器中调用dmidecode命令,则需要将宿主机上的dmidecode程序映射到Docker容器中才可使用。我以创建nginx容器为例:

docker run -id \
--privileged=true \
--name test_nginx \
-p 8888:80 \
-v /sbin/dmidecode:/sbin/dmidecode \
-v /dev/mem:/dev/mem \
nginx
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值