首页 > 解决方案 > 如何检查进程是否在 docker 容器中运行(cgroup v2 linux 主机)

问题描述

如何检查一个进程是否在 Docker 容器中运行?我想要一种可靠的方法,而且是面向未来的。

这已经在如何确定进程是否在 lxc/Docker 中运行?,但是答案已经很老了,而且它似乎不适用于最近的设置(启用了 cgroups v2 的 Linux 主机,Docker 20.10.x,内核 5.10.x)。

最受好评的答案(来自上面的链接)建议检查 in 中的字符串docker/proc/1/cgroup但这是我得到的:

# cat /proc/1/cgroup 
0::/

这似乎是因为我的主机上启用了 cgroups v2(它曾经与 cgroups v1 一起使用)。

另一个答案建议检查文件是否存在/.dockerenv。有用:

# test -e /.dockerenv && echo ok
ok

然而,来自 Docker 维护者的评论(从 2016 年开始)建议不要依赖这个文件(强调我的):

最初,“.dockerenv”用于跨容器边界传输容器的环境变量——我也不建议依赖它的存在(IIRC,你链接到的代码是它仍然存在的唯一原因)。/sys/fs/cgroup 中可能有一些有罪的东西,但我最近没有检查过。

-- https://github.com/moby/moby/issues/18355#issuecomment-220484748

那么有没有比这更好的方法呢?非常欢迎 Docker 维护人员的回答。谢谢!

标签: linuxdockercgroups

解决方案


推荐阅读