【发布时间】:2015-10-25 10:52:19
【问题描述】:
docker 命名空间与 Host 命名空间有何不同,以及如何在这两者之间映射 pid?谁能给我一个想法,帮助使用源代码在主机 n docker 之间轻松映射 pid?
【问题讨论】:
docker 命名空间与 Host 命名空间有何不同,以及如何在这两者之间映射 pid?谁能给我一个想法,帮助使用源代码在主机 n docker 之间轻松映射 pid?
【问题讨论】:
您可以在/proc/PID/status 文件中找到映射。它包含如下一行:
NSpid: 16950 24
这意味着主机上的16950 是容器内的24。
【讨论】:
正如我在“Running docker securely”中提到的:
目前,Docker 使用五个命名空间来改变系统的进程视图:进程、网络、挂载、主机名、共享内存。
默认情况下,正如我在您之前的问题“Docker Namespace in kernel level”中提到的那样,容器 pid 与主机隔离(除非您使用 --pid host 运行它们)是设计使然。
如果您使用的是--pid=host,那么这些容器 pid 在主机上是可见的,但不容易与特定容器匹配,直到解决了 issue 10163 and --pid=container:id。
2016 年 5 月更新:issue 10163 and --pid=container:id 实际上由 docker 1.12 的 PR 22481 解析,允许加入另一个容器的 PID 命名空间。
【讨论】: