How to check if a process is running inside docker container? How to check if a process is running inside docker container? docker docker

How to check if a process is running inside docker container?


Docker creates .dockerenv and .dockerinit (removed in v1.11) files at the top of the container's directory tree so you might want to check if those exist.

Something like this should work.

#!/bin/bashif [ -f /.dockerenv ]; then    echo "I'm inside matrix ;(";else    echo "I'm living in real world!";fi


To check inside a Docker container if you are inside a Docker container or not can be done via /proc/1/cgroup. As this post suggests you can to the following:

Outside a docker container all entries in /proc/1/cgroup end on / as you can see here:

vagrant@ubuntu-13:~$ cat /proc/1/cgroup11:name=systemd:/10:hugetlb:/9:perf_event:/8:blkio:/7:freezer:/6:devices:/5:memory:/4:cpuacct:/3:cpu:/2:cpuset:/

Inside a Docker container some of the control groups will belong to Docker (or LXC):

vagrant@ubuntu-13:~$ docker run busybox cat /proc/1/cgroup11:name=systemd:/10:hugetlb:/9:perf_event:/8:blkio:/7:freezer:/6:devices:/docker/3601745b3bd54d9780436faa5f0e4f72bb46231663bb99a6bb892764917832c25:memory:/4:cpuacct:/3:cpu:/docker/3601745b3bd54d9780436faa5f0e4f72bb46231663bb99a6bb892764917832c22:cpuset:/


We use the proc's sched (/proc/$PID/sched) to extract the PID of the process. The process's PID inside the container will differ then it's PID on the host (a non-container system).

For example, the output of /proc/1/sched on a containerwill return:

root@33044d65037c:~# cat /proc/1/sched | head -n 1bash (5276, #threads: 1)

While on a non-container host:

$ cat /proc/1/sched  | head -n 1init (1, #threads: 1)

This helps to differentiate if you are in a container or not. eg you can do:

if [[ ! $(cat /proc/1/sched | head -n 1 | grep init) ]]; then {    echo in docker} else {    echo not in docker} fi