在主机

时间:2016-10-14 03:31:08

标签: docker process namespaces

我只在docker容器中运行应用程序,而不是在主机上运行..应用程序在docker容器上有一些进程ID。该应用程序在主机上也有进程ID。主机上的进程ID和容器上的进程ID是不同的。如何从主机上查看在docker容器上运行的应用程序的进程ID?如何在主机上将此应用程序的进程ID映射到仅在容器(而非主机)上运行的应用程序的进程ID?我在互联网上搜索,但找不到正确的命令集

1 个答案:

答案 0 :(得分:0)

运行这样的命令应该可以在主机上获取容器的主进程的PID(ID 1)。

docker容器顶部

$ docker container top cf1b    
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3289                3264                0                   Aug24               pts/0               00:00:00            bash
root                9989                9963                99                  Aug24               ?                   6-07:24:43          java -javaagent:/apps/docker-custom/newrelic/newrelic.jar -Xmx4096m -Xms4096m -XX:+UseG1GC -XX:+UseStringDeduplication -XX:-TieredCompilation -XX:+ParallelRefProcEnabled -jar /apps/service/app.jar

因此,在这种情况下,我容器中的PID 1映射到主机上的ID 9989。

如果您的容器中确实只有一个进程,那将变得更加令人生厌。它可以使用nsenter之类的工具来窥视名称空间,但是如果您对容器具有exec特权,那么可以实现相同的目的,但是主机上的docker container top命令与容器中的ps命令结合可以为您提供对正在发生的事情的认识。

如果您可以弄清最终目标是什么,我们也许可以提供更清晰的指导。