linux - 如何检查进程是否在 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 维护人员的回答。谢谢!
解决方案
推荐阅读
- python - 快速文本类型错误:():不兼容的函数参数
- android - 在android中启动有关画中画模式的设置
- abap - SAP ABAP 循环内循环到 7.40 语法
- ruby-on-rails - Ruby on rails 控制器创建新参数
- javascript - 如何将承诺的返回分配给 JavaScript 中的全局变量?
- ios - iOS - 如何确定是否在扬声器和电视下选择了 Apple TV?
- django - Django 模板,我如何通过使用 {% now 'F jS Y' %} 来使用 if 条件
- reactjs - WebView crashing Expo
- python - How to properly extend a setter in python?
- python - ModuleNotFoundError: No module named my package but I can find it in pip freeze