在主机上具有进程ID的docker容器上映射应用程序的进程ID
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在主机上具有进程ID的docker容器上映射应用程序的进程ID相关的知识,希望对你有一定的参考价值。
我只在docker容器中运行应用程序,而不是在主机上。应用程序在docker容器上有一些进程ID。该应用程序在主机上也有进程ID。主机上的进程ID和容器上的进程ID是不同的。如何从主机上查看在docker容器上运行的应用程序的进程ID?如何在主机上将此应用程序的进程ID映射到仅在容器(而非主机)上运行的应用程序的进程ID?我在互联网上搜索,但找不到正确的命令集
答案
运行这样的命令可以获得主机上容器主进程(ID 1)的PID。
码头工人集装箱顶部
$ 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 privelages到你的容器那么这将实现相同的事情,但主机上的docker container top命令与容器中的ps命令相结合可以给你了解正在发生的事情。
如果您能够阐明您的最终目标,我们可能会提供更明确的指导。
以上是关于在主机上具有进程ID的docker容器上映射应用程序的进程ID的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Java 进程在 docker 容器与主机之间消耗两倍的内存