I am using docker containers and I have mounted host /proc to container /host/proc. Now I want ps command inside docker container to look for processes into /host/proc instead of /proc. or how can I right similar utility to ps
Advertisement
Answer
the /proc
path is hardcoded in the source tree of the /bin/ps
binary file.
Thus, you need to recompile /bin/ps
Follow these steps to recompile /bin/ps
inside a container that mounts the host /proc
and use this new ps
to display the process list of the docker host from the container:
In this example, I do not use /host/proc
but /prod
, to avoid modifying the path length to the mount point of the procfs filesystem (increasing the path length could trigger runtime errors in some situations). I also use a container based on OpenSUSE Leap 42.1, since you have not described the base image you are using.
1- on the docker host, first download the /bin/ps sources:
fenyo@myhost# mkdir /root/git fenyo@myhost# cd /root/git fenyo@myhost# git clone https://gitlab.com/procps-ng/procps.git fenyo@myhost# cd procps
2- replace any occurence of "/proc
by "/prod
in **/*.c
3- run your docker container, mounting procfs on /prod
in the container
fenyo@myhost# docker run -v /proc:/prod -v /root/git/procps:/root/git/procps -t -i --rm opensuse:42.1 bash
4- inside the docker container, recompile /bin/ps
bash-4.2# cd /root/git/procps bash-4.2# zypper install -y gettext gettext-tools autoconf libtool pkg-config gcc make bash-4.2# ./autogen.sh bash-4.2# ./configure --without-ncurses bash-4.2# make
Now, you can use /root/git/procps/ps/pscommand
as a replacement for /bin/ps
, in order to use /prod
instead of /proc
. With pscommand
, you will get a process list from the host, not from the container:
bash-4.2# ps -auxgww USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 20064 3076 ? Ss 23:20 0:00 bash root 5199 0.0 0.0 33340 2996 ? R+ 23:24 0:00 ps -auxgww bash-4.2# /root/git/procps/ps/pscommand -auxgww USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 33620 3956 ? Ss Jul03 1:13 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 2 0.0 0.0 0 0 ? S Jul03 0:01 [kthreadd] root 3 0.0 0.0 0 0 ? R Jul03 4:44 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< Jul03 0:01 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S Jul03 15:27 [rcu_preempt] root 8 0.0 0.0 0 0 ? S Jul03 0:00 [rcu_sched] root 9 0.0 0.0 0 0 ? S Jul03 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S Jul03 10:02 [rcuop/0] root 11 0.0 0.0 0 0 ? S Jul03 0:00 [rcuos/0] root 12 0.0 0.0 0 0 ? S Jul03 0:00 [rcuob/0] root 13 0.0 0.0 0 0 ? S Jul03 0:06 [migration/0] root 14 0.0 0.0 0 0 ? S Jul03 0:07 [watchdog/0] root 15 0.0 0.0 0 0 ? S Jul03 0:06 [watchdog/1] root 16 0.0 0.0 0 0 ? S Jul03 0:04 [migration/1] root 17 0.0 0.0 0 0 ? S Jul03 1:07 [ksoftirqd/1] root 19 0.0 0.0 0 0 ? S< Jul03 0:00 [kworker/1:0H] root 20 0.0 0.0 0 0 ? S Jul03 2:42 [rcuop/1] root 21 0.0 0.0 0 0 ? S Jul03 0:00 [rcuos/1] root 22 0.0 0.0 0 0 ? S Jul03 0:00 [rcuob/1] root 23 0.0 0.0 0 0 ? S Jul03 0:05 [watchdog/2] root 24 0.0 0.0 0 0 ? S Jul03 0:06 [migration/2] root 25 0.0 0.0 0 0 ? S Jul03 0:48 [ksoftirqd/2] root 27 0.0 0.0 0 0 ? S< Jul03 0:00 [kworker/2:0H] root 28 0.0 0.0 0 0 ? S Jul03 7:32 [rcuop/2] root 29 0.0 0.0 0 0 ? S Jul03 0:00 [rcuos/2] root 30 0.0 0.0 0 0 ? S Jul03 0:00 [rcuob/2] root 31 0.0 0.0 0 0 ? S Jul03 0:05 [watchdog/3] root 32 0.0 0.0 0 0 ? S Jul03 0:05 [migration/3] root 33 0.0 0.0 0 0 ? S Jul03 0:37 [ksoftirqd/3] [...]