container内的app如何知道自己是在一个容器内呢?


请教大家一个问题?
现在的容器技术中,一个container内有多个app的情况下,app是否有方法可以知道自己是在container内,还是在host上呢?
已邀请:

subchen

赞同来自: psl77586

  1. 查看 ps -ef, pid=0的那个进程
  2. 查看 ls /.docker* 有2个隐藏文件

徐磊 - BlackOps@Qunar

赞同来自: tiancai


有好几种方式,我说说我知道的:

第一种,cadvisor采用的,简单粗暴,就是启动container的时候额外mount一个/rootfs,这样程序内部直接检查/rootfs是否存在就知道了,相当于一个flag,当然你也可以换成别的。

第二种,查看/proc/self/cgroup文件,该文件是当前进程的cgroup信息,有的话可以判断自己是运行在cgroup下,想再细致一点的话,判断下cgroup的path是不是docker/xxxxx吧。

第三种,查看/proc/self/mountinfo文件,这个跟上一个类似,主要看有没有cgroup的挂载信息,不过mount信息里有一部分内容,比如/etc/hosts等跟容器的网络模式关系较大,不建议做为判断依据。

集思广益大家一起补充吧,我常用的是第一种,简单好用。

要回复问题请先登录注册