我只在docker容器中运行应用程序,而不是在主机上运行..应用程序在docker容器上有一些进程ID。该应用程序在主机上也有进程ID。主机上的进程ID和容器上的进程ID是不同的。如何从主机上查看在docker容器上运行的应用程序的进程ID?如何在主机上将此应用程序的进程ID映射到仅在容器(而非主机)上运行的应用程序的进程ID?我在互联网上搜索,但找不到正确的命令集
答案 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命令结合可以为您提供对正在发生的事情的认识。
如果您可以弄清最终目标是什么,我们也许可以提供更清晰的指导。