日度归档:2025-11-07

如何判断一个进程是否运行在容器中

1、查看该进程的 PID

以 nginx 为例

# ss -ntpl | grep nginx
LISTEN     0      511          *:88                       *:*                   users:(("nginx",pid=28791,fd=8),("nginx",pid=28790,fd=8),("nginx",pid=28789,fd=8),("nginx",pid=28788,fd=8),("nginx",pid=28787,fd=8))
LISTEN     0      511          *:80                       *:*                   users:(("nginx",pid=28791,fd=7),("nginx",pid=28790,fd=7),("nginx",pid=28789,fd=7),("nginx",pid=28788,fd=7),("nginx",pid=28787,fd=7))

或通过 ps -aux ,第二列就是 PID

ps -aux | grep nginx
root     28787  0.0  0.0  10560  1804 ?        Ss   09:33   0:00 nginx: master process
100      28788  0.0  0.0  11076  2884 ?        S    09:33   0:00 nginx: worker process
100      28789  0.0  0.0  11024  2500 ?        S    09:33   0:00 nginx: worker process
100      28790  0.0  0.0  11056  2888 ?        S    09:33   0:00 nginx: worker process
100      28791  0.0  0.0  11024  2500 ?        S    09:33   0:00 nginx: worker process
root     31719  0.0  0.0 112812   976 pts/2    S+   09:59   0:00 grep --color=auto nginx

2、查看进程的 cgroup

cat /proc/<pid>/cgroup
# cat /proc/28791/cgroup                                                                                                                                                                               
11:perf_event:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
10:pids:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
9:freezer:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
8:memory:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
7:devices:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
6:cpuacct,cpu:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
5:hugetlb:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
4:net_prio,net_cls:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
3:blkio:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
2:cpuset:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5
1:name=systemd:/docker/21d0cf703b4719cf1c86d1c0094773ff1c580e8fb039fc95b9021726dd2cb5c5

看到例如CPU、内存、磁盘都在 docker 中,因此此进程应该是运行在容器中。

3、确认容器服务

docker ps | grep <容器ID前4到10位>

# docker ps | grep 21d0c
21d0cf703b47   nginx   "tini entrypoint.sh"   32 minutes ago   Up 32 minutes      mynginx