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

2019-08-21 13:59:08 +08:00
 NoKey
就是说,springboot 服务启动的时候,能不能检测自己是在物理服务器上启动的
还是在 docker 容器中启动的?
目前有个需求是禁止服务从 docker 中启动
请大佬赐教,谢谢
3521 次点击
所在节点    程序员
34 条回复
qiyuey
2019-08-21 14:01:04 +08:00
先说一下背景,再评估方案,最后实现
yinzhili
2019-08-21 14:04:50 +08:00
有一个思路:java 中可以执行 shell,然后你就知道当前环境是不是 docker 了
NoKey
2019-08-21 14:12:18 +08:00
@qiyuey 比如,运行的服务要求在指定的 mac 地址的服务器上运行,docker 可以设置虚拟 mac,通过 java 程序获取到的 mac 地址无法区分是虚拟的还是物理的,所以就需要禁止服务从 docker 里启动
NoKey
2019-08-21 14:12:36 +08:00
@yinzhili 请问一下,是执行哪个命令呢?
tomczhen
2019-08-21 14:13:40 +08:00
典型的 xy 问题。
Seney
2019-08-21 14:16:11 +08:00
通过获取环境变量或者执行 exec systemd-detect-virt 类似这种方法判断是不是物理机
rockyou12
2019-08-21 14:17:17 +08:00
@NoKey 虚拟机一样可以模拟 mac 这些,你这需求有问题
undeflife
2019-08-21 14:21:53 +08:00
cat /proc/1/cgroup
rrfeng
2019-08-21 14:22:50 +08:00
那要不要考虑虚拟机啊? kvm 之类的要禁止吗
NoKey
2019-08-21 15:11:21 +08:00
@rockyou12 大佬们这么一说,我觉得确实有问题,不知道有没有什么好的办法,限制服务运行的地方,ip 地址的话也麻烦,万一啥时候 ip 地址变了,又得调整
NoKey
2019-08-21 15:11:52 +08:00
@rrfeng 对,目前看来这种方式有问题,得着点别得方式来限制这个
qinxi
2019-08-21 15:27:08 +08:00
我更好奇是什么场景需要这种操作
chendy
2019-08-21 15:29:08 +08:00
我更好奇是什么场景需要这种操作
liuhuansir
2019-08-21 15:32:29 +08:00
我也好奇,前几天才学的 docker,刚上线的小程序的后台就是用 docker+springboot 部署的,你这反其道而行之,我想知道这么做的目的是啥
yinzhili
2019-08-21 15:35:20 +08:00
@NoKey 简单点:检测是否存在 /.dockerenv 这个文件
xaplux
2019-08-21 15:36:10 +08:00
一脸懵逼,这是什么操作。
NoKey
2019-08-21 15:40:39 +08:00
@qinxi 简单的说,就是要限制服务运行的 mac 地址,docker 可以设置 mac 地址,所以不希望服务在 docker 上运行,不过目前看来这个需求有问题,我需要考虑一些其他方式来限制
qwerthhusn
2019-08-21 15:40:43 +08:00
简单的方法,检查 PID 是 systemd 还是其他应用(或者就是本应用)
qwerthhusn
2019-08-21 15:40:54 +08:00
@qwerthhusn PID 为 1
xujif
2019-08-21 15:47:47 +08:00
检查 pid,或者进程数量,docker 内部一般不会有太多进程

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593826

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX