在主机上具有进程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的主要内容,如果未能解决你的问题,请参考以下文章

Docker网络与Iptables浅析

Docker-端口映射

Docker-端口映射

为啥我的 Java 进程在 docker 容器与主机之间消耗两倍的内存

如何在没有端口映射的情况下将 docker 容器的 ip 和端口暴露给外部 docker 主机?

理解 docker 容器中的 uid 和 gid