Updated1我有一个外壳,它会在一些函数中改变TCP内核的参数,但现在我需要让这个外壳在Docker容器中运行,也就是说,外壳需要知道它正在容器中运行,并停止配置内核。
现在我不确定如何实现这一点,下面是容器中/proc/self/cgroup
的内容:
9:hugetlb:/
8:perf_event:/
7:blkio:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct:/
2:cpu:/docker/25ef774c390558ad8c4e9a8590b6a1956231aae404d6a7aba4dde320ff569b8b
1:cpuset:/
上面的任何标志都可以用来判断这个进程是否在容器中运行?
Updated2:我也注意到了Determining if a process runs inside lxc/Docker,但它在这种情况下似乎不起作用,我的容器的/proc/1/cgroup
中的内容是:
8:perf_event:/
7:blkio:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct:/
2:cpu:/docker/25ef774c390558ad8c4e9a8590b6a1956231aae404d6a7aba4dde320ff569b8b
1:cpuset:/
否/lxc/containerid
发布于 2014-05-09 15:29:38
检查Docker容器内部是否在Docker容器内可以通过/proc/1/cgroup
完成。正如this post建议的那样,您可以执行以下操作:
在停靠容器外部,/proc/1/cgroup
中的所有条目都在/
上结束,如下所示:
vagrant@ubuntu-13:~$ cat /proc/1/cgroup
11:name=systemd:/
10:hugetlb:/
9:perf_event:/
8:blkio:/
7:freezer:/
6:devices:/
5:memory:/
4:cpuacct:/
3:cpu:/
2:cpuset:/
在Docker容器中,一些控制组将属于Docker (或LXC):
vagrant@ubuntu-13:~$ docker run busybox cat /proc/1/cgroup
11:name=systemd:/
10:hugetlb:/
9:perf_event:/
8:blkio:/
7:freezer:/
6:devices:/docker/3601745b3bd54d9780436faa5f0e4f72bb46231663bb99a6bb892764917832c2
5:memory:/
4:cpuacct:/
3:cpu:/docker/3601745b3bd54d9780436faa5f0e4f72bb46231663bb99a6bb892764917832c2
2:cpuset:/
发布于 2016-05-04 06:21:09
我们使用进程的sched (/proc/$ PID /sched)来提取进程的PID。容器内的进程PID与主机(非容器系统)上的进程PID会有所不同。
例如,容器上的/proc/1/sched的输出将返回:
root@33044d65037c:~# cat /proc/1/sched | head -n 1
bash (5276, #threads: 1)
在非容器主机上:
$ cat /proc/1/sched | head -n 1
init (1, #threads: 1)
这有助于区分您是否在容器中。例如你可以这样做:
if [[ ! $(cat /proc/1/sched | head -n 1 | grep init) ]]; then {
echo in docker
} else {
echo not in docker
} fi
发布于 2018-08-05 01:28:55
对我有效的方法是检查“/”的inode编号。在码头内部,这是一个非常高的数字。在码头外,它是一个非常小的数字,比如'2‘。我认为这种方法还取决于所使用的FileSystem。
示例
在docker内部:
# ls -ali / | sed '2!d' |awk {'print $1'}
1565265
在码头外
$ ls -ali / | sed '2!d' |awk {'print $1'}
2
在脚本中:
#!/bin/bash
INODE_NUM=`ls -ali / | sed '2!d' |awk {'print $1'}`
if [ $INODE_NUM == '2' ];
then
echo "Outside the docker"
else
echo "Inside the docker"
fi
https://stackoverflow.com/questions/23513045
复制相似问题