如何检查Docker容器内的进程是否正在运行?我需要一种可靠且具有未来性的方法。
这个问题已经在如何确定进程是否在lxc / Docker中运行?中得到了回答,但是答案已经过时,似乎在最近的设置(启用cgroups v2的Linux主机,Docker 20.10.x,内核5.10.x)上不起作用。
链接上面排名最高的答案建议检查
似乎是因为我的主机启用了cgroups v2(它曾经可以使用cgroups v1)。
另一个答案建议检查文件
然而,Docker维护者的评论(日期为2016年)建议不要依赖这个文件来传递容器环境变量(强调是我的)。原本“.dockerenv”用于在容器边界上跨容器传输环境变量。我不建议依赖它的存在(如果我没记错的话,你链接的代码是它仍然存在的唯一原因)。/sys/fs/cgroup里可能有一些可疑的东西,但我最近没有检查过。
这个问题已经在如何确定进程是否在lxc / Docker中运行?中得到了回答,但是答案已经过时,似乎在最近的设置(启用cgroups v2的Linux主机,Docker 20.10.x,内核5.10.x)上不起作用。
链接上面排名最高的答案建议检查
/proc/1/cgroup
中的字符串docker
,但是以下是我的结果:# cat /proc/1/cgroup
0::/
似乎是因为我的主机启用了cgroups v2(它曾经可以使用cgroups v1)。
另一个答案建议检查文件
/.dockerenv
的存在。它有效。# test -e /.dockerenv && echo ok
ok
然而,Docker维护者的评论(日期为2016年)建议不要依赖这个文件来传递容器环境变量(强调是我的)。原本“.dockerenv”用于在容器边界上跨容器传输环境变量。我不建议依赖它的存在(如果我没记错的话,你链接的代码是它仍然存在的唯一原因)。/sys/fs/cgroup里可能有一些可疑的东西,但我最近没有检查过。
-- https://github.com/moby/moby/issues/18355#issuecomment-220484748
那么,有比这更好的方法吗?Docker维护者的回答将非常受欢迎。谢谢!