1

i am running application in docker container only and not on host machine.. Application has some process ID on docker container. That application also has process id on host . Process Id on host and process ID on container are differerent. How can I see process ID of application running on docker container from host ? How can I map the process ID of application running on container only (and not on host ) with process ID of this application on host ? I searched on internet , but could not find correct set of commands

vivek
  • 11
  • 1
  • 4

2 Answers2

2

Running a command like this should get you the PID of the container's main process (ID 1) on the host.

docker container top

$ 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

So in this case PID 1 in my container maps to ID 9989 on the host.

If a process is indeed ONLY in your container, that becomes more chellenging. It You can use tools like nsenter to peek into the name spaces but if you have exec privelages to your container then that would achieve the same thing, but the docker container top command on the host combined with the ps command within the container can give you an idea of what is happening.

If you can clarify what your end goal is, we might be able to provide more clear guidance.

Tim Razik
  • 61
  • 5
2

In order to get the mapping between container process ID and host process ID, one could run ps -ef on container and docker top <container> on the host. The CMD column present in both of these outputs will help in the decision. Below is the sample output in my environment:

container1:/$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
2033        10     0  0 11:08 pts/0    00:00:00 postgres -c config_file=/etc/postgresql/postgresql_primary.conf


host1# docker top warehouse_db
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
bbharati            11677               11660               0                   11:08               pts/0               00:00:00            postgres -c config_file=/etc/postgresql/postgresql_primary.conf

As we can see, the container process with PID=10 maps to the host process with PID=11677

Binita Bharati
  • 5,239
  • 1
  • 43
  • 24