【发布时间】:2018-08-25 23:11:25
【问题描述】:
在 docker 容器中使用 exec 命令后,我可以使用 exec inspect 获取 PID。问题是这个 ID 不是容器本地的,而是系统 PID。所以我会得到类似22620的东西,而docker容器内的PID是695。
我知道 docker 使用进程命名空间来隔离其进程。所以我试图用
cat /proc/22620/status | grep NSpid
.这确实给了我正在寻找的 PID:
NSpid: 22620 695
但是我需要解析这个字符串来获取 PID。 有没有合适的方法来获取 docker 容器使用的 PID?
PS。
我需要这个进程 ID 来终止由其他 exec 调用启动的进程。我无法杀死系统进程,因为它由 root 拥有,我无法使用 sudo。
【问题讨论】:
-
Is there a proper way to get the PID used by the docker container?你到底是什么意思? Docker 命令? -
@k.wahome 我无需解析字符串即可。最好使用 docker API
-
为什么不在容器内杀死它呢?
docker exec sh -c 'kill $(pgrep NSpid)'? -
@KamilCuk 这正是我需要 NSpid 的目的。