在Linux之前,我能够从进程调度信息中从v4容器中获取主机PID。
例如,如果我在容器中运行sleep命令,并且本地PID为37,则可以通过以下方法检查主机上的实际PID:
root@helloworld-595777cb8b-gjg4j:/# head /proc/37/sched
sleep (27062, #threads: 1)我可以在主机上验证PID 27062是否对应于容器内的进程。
root 27062 0.0 0.0 4312 352 pts/0 S 16:29 0:00 sleep 3000我已经在RHEL7 (内核:Linux3.10)上用: 17.09.0-ce尝试了这一点。
我无法在RHEL8 (内核:Linux4.18)上用Docker : 20.10复制相同的结果。事实上,我总是从调度信息中得到局部PID。
/ # head /proc/8/sched
sleep (8, #threads: 1)我可能错了,但我的假设是内核中的某些内容发生了更改,从而禁止获得主机PID。
那么问题是如何从容器中获取主机PID呢?
发布于 2022-11-25 16:16:34
commit 74dc3384fc79 ("sched/debug: Use task_pid_nr_ns in /proc/$pid/sched")在Linux4.14内核中修复了允许在容器中的/proc/ PID /sched中发现主机PID的错误(如果您愿意,也可以使用“功能”)。
由于更改,如果使用PID名称空间,容器将无法获得进程的主机PID (至少通过/proc/PID/sched)。
https://stackoverflow.com/questions/74564522
复制相似问题