请教大佬,有什么办法禁止 springboot 服务在 docker 中启动 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
NoKey
V2EX    程序员

请教大佬,有什么办法禁止 springboot 服务在 docker 中启动

  •  
  •   NoKey 2019-08-21 13:59:08 +08:00 3960 次点击
    这是一个创建于 2246 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是说,springboot 服务启动的时候,能不能检测自己是在物理服务器上启动的
    还是在 docker 容器中启动的?
    目前有个需求是禁止服务从 docker 中启动
    请大佬赐教,谢谢
    34 条回复    2019-08-22 09:16:18 +08:00
    qiyuey
        1
    qiyuey  
       2019-08-21 14:01:04 +08:00
    先说一下背景,再评估方案,最后实现
    yinzhili
        2
    yinzhili  
       2019-08-21 14:04:50 +08:00
    有一个思路:java 中可以执行 shell,然后你就知道当前环境是不是 docker 了
    NoKey
        3
    NoKey  
    OP
       2019-08-21 14:12:18 +08:00
    @qiyuey 比如,运行的服务要求在指定的 mac 地址的服务器上运行,docker 可以设置虚拟 mac,通过 java 程序获取到的 mac 地址无法区分是虚拟的还是物理的,所以就需要禁止服务从 docker 里启动
    NoKey
        4
    NoKey  
    OP
       2019-08-21 14:12:36 +08:00
    @yinzhili 请问一下,是执行哪个命令呢?
    tomczhen
        5
    tomczhen  
       2019-08-21 14:13:40 +08:00 via Android   1
    典型的 xy 问题。
    Seney
        6
    Seney  
       2019-08-21 14:16:11 +08:00
    通过获取环境变量或者执行 exec systemd-detect-virt 类似这种方法判断是不是物理机
    rockyou12     7
    rockyou12  
       2019-08-21 14:17:17 +08:00
    @NoKey 虚拟机一样可以模拟 mac 这些,你这需求有问题
    undeflife
        8
    undeflife  
       2019-08-21 14:21:53 +08:00   1
    cat /proc/1/cgroup
    rrfeng
        9
    rrfeng  
       2019-08-21 14:22:50 +08:00
    那要不要考虑虚拟机啊? kvm 之类的要禁止吗
    NoKey
        10
    NoKey  
    OP
       2019-08-21 15:11:21 +08:00
    @rockyou12 大佬们这么一说,我觉得确实有问题,不知道有没有什么好的办法,限制服务运行的地方,ip 地址的话也麻烦,万一啥时候 ip 地址变了,又得调整
    NoKey
        11
    NoKey  
    OP
       2019-08-21 15:11:52 +08:00
    @rrfeng 对,目前看来这种方式有问题,得着点别得方式来限制这个
    qinxi
        12
    qinxi  
       2019-08-21 15:27:08 +08:00
    我更好奇是什么场景需要这种操作
    chendy
        13
    chendy  
       2019-08-21 15:29:08 +08:00
    我更好奇是什么场景需要这种操作
    liuhuansir
        14
    liuhuansir  
       2019-08-21 15:32:29 +08:00
    我也好奇,前几天才学的 docker,刚上线的小程序的后台就是用 docker+springboot 部署的,你这反其道而行之,我想知道这么做的目的是啥
    yinzhili
        15
    yinzhili  
       2019-08-21 15:35:20 +08:00
    @NoKey 简单点:检测是否存在 /.dockerenv 这个文件
    xaplux
        16
    xaplux  
       2019-08-21 15:36:10 +08:00
    一脸懵逼,这是什么操作。
    NoKey
        17
    NoKey  
    OP
       2019-08-21 15:40:39 +08:00
    @qinxi 简单的说,就是要限制服务运行的 mac 地址,docker 可以设置 mac 地址,所以不希望服务在 docker 上运行,不过目前看来这个需求有问题,我需要考虑一些其他方式来限制
    qwerthhusn
        18
    qwerthhusn  
       2019-08-21 15:40:43 +08:00
    简单的方法,检查 PID 是 systemd 还是其他应用(或者就是本应用)
    qwerthhusn
        19
    qwerthhusn  
       2019-08-21 15:40:54 +08:00
    @qwerthhusn PID 为 1
    xujif
        20
    xujif  
       2019-08-21 15:47:47 +08:00
    检查 pid,或者进程数量,docker 内部一般不会有太多进程
    abcbuzhiming
        21
    abcbuzhiming  
       2019-08-21 15:58:02 +08:00
    这个问题提的方式就是错的,楼主应该问的是,java 怎么检测自己是在物理服务器上还是在 docker 里,肯定是能做到的,jdk11 之前,jvm 一直不能检测 docker 环境,导致申请资源时一直以物理机整体资源为标准申请,jdk11 之后,才能以 docker 环境限制的资源标准来申请资源,因此 java 肯定能检测到自己是不是 docker 里
    @qinxi
    @chendy
    八成是带有授权的程序,禁止用户多开
    alamaya
        22
    alamaya  
       2019-08-21 16:04:22 +08:00
    没戏,虚拟机也能改,联网授权,重复 mac 直接不启动就完事儿,不过 java 嘛,分分钟就被破了,人家想破解你,也防不了的
    ginozhu
        23
    ginozhu  
       2019-08-21 16:08:12 +08:00
    这个思路很有问题啊,讲道理虚拟化容器总能针对性地把自己伪装成目标服务器
    调换一下思路,只要在目标服务器的某个目录放个私钥,springboot 启动时检验一下这个私钥,不就可以防止应用在任何 docker 或其他物理机启动吗
    liukanshan
        24
    liukanshan  
       2019-08-21 16:11:42 +08:00
    加密狗配合 JNI 是比较靠谱的方式 也可以在 docker 上面跑(共享 USB) 但不是完美的 只是增加了破解难度而已 (能过滤掉大部分的已经算很不错的了)。
    Rheinmetal
        25
    Rheinmetal  
       2019-08-21 16:11:58 +08:00
    物理机也能改 mac 地址呀
    你这授权方式从根上就不合适
    arrow8899
        26
    arrow8899  
       2019-08-21 16:12:27 +08:00
    物理机的网卡也可以修改 mac 地址啊,如果你要做软件授权的话,这样肯定行不通,可以通过其他方式来限制
    NoKey
        27
    NoKey  
    OP
       2019-08-21 16:20:43 +08:00
    @abcbuzhiming 谢谢,就是带授权的,目前就是想防止有人把程序拷贝到其他地方运行,相关授权信息都是配置文件的形式存在
    NoKey
        28
    NoKey  
    OP
       2019-08-21 16:22:06 +08:00
    @ginozhu 谢谢,这个方式考虑过,放私钥,最终还是会形成文件,如果我们自己去部署,倒是没问题,但是如果让第三方部署,必然会出一个部署文档,这个时候私钥的存放位置就暴露了,所有人都知道这个东西了
    NoKey
        29
    NoKey  
    OP
       2019-08-21 16:24:05 +08:00
    @liukanshan 是的,加密狗是比较好的方式,可是加密狗的价格有点贵,这个还得考虑一下
    yqsas
        30
    yqsas  
       2019-08-21 16:35:14 +08:00 via iPhone
    @abcbuzhiming jdk 这个是通过 cgroup 实现的吧,是不是 docker 还是判断不了
    arcwarden
        31
    arcwarden  
       2019-08-21 17:25:24 +08:00
    有人帮忙投个简历吗,招服务端技术大佬,详情见 https://www.yuque.com/docs/share/9ed147b5-dea4-4a4c-8447-be5ae2983b4a
    kkkkkrua
        32
    kkkkkrua  
       2019-08-21 20:04:16 +08:00 via iPhone
    判断 pid 是不是 1 ?
    frozenshadow
        33
    frozenshadow  
       2019-08-22 00:17:00 +08:00 via Android
    用 dmicode,综合判断是否实体机器。
    wweir
        34
    wweir  
       2019-08-22 09:16:18 +08:00 via Android   1
    歪个楼
    调用系统命令 shutdown -h now,能关机的不是 docker,关不了机的是 docker
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1033 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 18:36 PVG 02:36 LAX 11:36 JFK 14:36
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86