我有 3 个容器:
containerA
、containerB
、containerC
。我无法控制他们。
我正在开发第四个容器,其中包含采样分析器,因此需要访问其他容器内的进程。以前,当我只需要访问
containerA
时,我使用命令 docker run --security-opt="apparmor=unconfined" --cap-add=SYS_PTRACE --pid=container:12345abc --rm -it --entrypoint bash mycontainer
并且它按预期工作。现在,我需要能够访问所有 3 个容器中的进程。有办法做到这一点吗?
一个容器只有一个 PID 命名空间:您可以(如问题中所示)让一个容器使用另一个容器的 PID 命名空间,但无法为容器提供访问多个 PID 命名空间的权限。
一种选择是在同一 PID 命名空间中运行所有四个容器,例如:
docker run --name containerA ...
docker run --name containerB --pid container:containerA ...
docker run --name containerC --pid container:containerA ...
docker run --name containerD --pid container:containerA ...
第二个选项是在 host pid 命名空间中运行分析容器,在这种情况下,它将能够看到在所有其他容器中运行的进程...但它将具有 pid 的主机视图比容器视图:
docker run --pid host ...
您需要弄清楚如何将主机 pid 映射到相应的容器。 here描述了一种机制,但还有其他方法可以实现这一点。