在 ps 列表中显示 docker 容器名称

在 ps 列表中显示 docker 容器名称

我有一个非常简单的 Ubuntu 容器,其中运行着 apache。当我使用以下命令启动容器时:

$ sudo docker run -p 192.168.189.134:80:80 -d wnoorduin/apache

其中 192.168.189.134 是我的 IP 地址,查看 docker 主机上的进程,我看到:

$ sudo ps -ef | grep docker root 35701 1 0 13:46 ?
00:00:14 /usr/bin/docker 守护进程 root 37825 35701 0 14:47 ?
00:00:00 docker-proxy -proto tcp -host-ip 192.168.189.134 -host-port 80 -container-ip 172.17.0.2 -container-port 80 root 37946 3465 0 14:53 pts/0 00:00:00 grep --color=auto docker

root @ willems-vm:/#ps -ef | grep apache root 37832 35701 0 14:
47?00:00:00 / bin / sh / usr / sbin / apache2ctl -D FOREGROUND root 37856 37832 0 14:47?00:00:00 / usr / sbin / apache2 -D FOREGROUND www-data 37857 37856 0 14:47?00:00:00 / usr / sbin / apache2 -D FOREGROUND www-data 37858 37856 0 14:47? 00:00:00 /usr/sbin/apache2 -D FOREGROUND root 37950 3465 0 14:54 pts/0
00:00:00 grep --color=auto apache

和:

root @ willems-vm:/#ps -efZ | grep docker unconfined
root 35701 1 0 13:46?00:00:14 / usr / bin / docker daemon unconfined root 37825 35701 0 14:47?
00:00:00 docker-proxy -proto tcp -host-ip 192.168.189.134 -host-port 80 -container-ip 172.17.0.2 -container-port 80 docker-default
root 37832 35701 0 14:47?00:00:00 / bin / sh / usr / sbin / apache2ctl -D FOREGROUND docker-default
root 37856 37832 0 14:47? 00:00:00 /usr/sbin/apache2 -D FOREGROUND docker-default www-data 37857 37856 0 14:47 ? 00:00:00 /usr/sbin/apache2 -D FOREGROUND docker-default www-data 37858 37856 0 14:47 ? 00:00:00 /usr/sbin/apache2 -D FOREGROUND unconfined root 37952 3465 0 14:55 pts/0 00:00:00 grep --color=auto docker

因此,将 SELinux 的 Z 放入其中后,我可以确认 apache2 进程来自 docker 容器。在我以前配置 Solaris 容器的时候,实际上可以在 ps 列表中看到区域名称(这被称为区域)(如果我没记错的话,它也是 ps -efZ,但 Z 当时的含义完全不同)。

当运行一个容器时,情况还不算太糟,但当运行 10 个容器时,您无法将进程追踪到容器。那么:有没有办法在 docker 主机上执行此操作,而无需 docker 命令?

答案1

常规旧ps命令不支持 docker,因此无法使用该命令查看容器名称。

有一款名为 sysdig 的工具非常强大。它可以显示很多不同的东西,而且可以识别容器。

有些人认为 sysdig 唯一的缺点是它需要内核模块才能工作。它收集进程实际执行的数据,并可以真正深入了解系统上任何事物的健康状况和状态。

我通常运行 csysdig 工具来获取 curses 交互式类型工具。

运行后sudo csysdig -pc我看到了以下进程视图:

Viewing: Processes For: whole machine
Source: Live System Filter: evt.type!=switch
   PID    VPID     CPU USER          TH     VIRT      RES    FILE     NET Container           Command
 27485   27485    2.00 root           1     132M      37M       0    0.00 host                csysdig -pc
 29099       7    0.50 root          18       3G     369M       0    0.00 boss_twilight       java -XX:MaxPermSize=128M
 30969     241    0.50               42       2G     325M       0   2.18K gitlab              sidekiq 3.3.0 gitlab-rails
 30137      93    0.50               52       1G      42M       0  274.50 splunk              mongod --dbpath=/opt/splun
 29236      16    0.50 root          30       3G       1G       0    0.00 bossmc_forge-1.7.10 java -XX:MaxPermSize=128M
 32654       7    0.50 root           1      96M      12M       0  18.84K bossmc_lanannounce  python lanannounce.py
 30965     237    0.50                3      38M       2M      7K  183.50 gitlab              /opt/gitlab/embedded/bin/r
 28597   28597    0.00 root           5     106M     464K       0    0.00 host                /usr/bin/docker-proxy -pro
 31029     270    0.00                1      27M       2M       0    0.00 gitlab              postgres: stats collector
 28542   28542    0.00 root           6     114M     468K       0    0.00 host                /usr/bin/docker-proxy -pro
 28500   28500    0.00 root           5      42M     444K       0    0.00 host                /usr/bin/docker-proxy -pro
 28517   28517    0.00 root           5     106M     580K       0    0.00 host                /usr/bin/docker-proxy -pro
 28366   28366    0.00 root           5      42M     176K       0    0.00 host                /usr/bin/docker-proxy -pro
 17675   17675    0.00 root           1      19M       1M       0    0.00 host                /lib/systemd/systemd-login
 28409   28409    0.00 root           5      42M     420K       0    0.00 host                /usr/bin/docker-proxy -pro
 28634   28634    0.00 root           6      50M     388K       0    0.00 host                /usr/bin/docker-proxy -pro
     1       1    0.00 root           1      28M       3M       0    0.00 host                /lib/systemd/systemd --sys
 31289     282    0.00                1      19M       3M       6    0.00 gitlab              /bin/bash /opt/gitlab/embe
 28613   28613    0.00 root           5     106M     404K       0    0.00 host                /usr/bin/docker-proxy -pro
 30941     223    0.00 root           1       4M       1M       0    0.00 gitlab              runsv logrotate
 29409      12    0.00 root           1      20M      12K       0    0.00 auto-proxy          /bin/bash -c source ".prof
 28643   28643    0.00 root           5     106M     500K       0    0.00 host                /usr/bin/docker-proxy -pro
 31696     353    0.00                2     374M     107M       0    0.00 gitlab              unicorn worker[3] -D -E pr
   668     668    0.00 root           1      14M     180K       0    0.00 host                /sbin/agetty --noclear tty
 30948     230    0.00 root           1       4M     584K       0    0.00 gitlab              svlogd -tt /var/log/gitlab
 28508   28508    0.00 root           6     115M     764K       0    0.00 host                /usr/bin/docker-proxy -pro
   659     659    0.00 root           1       4M     176K       0    0.00 host                /usr/sbin/acpid
F1Help  F2Views F4FilterF5Echo  F6Dig   F7LegendF8ActionsF9Sort  F12SpectroCTRL+FSearchp Pause               1/146(0.7%)

这显示了每个进程的运行位置。例如,我有几个 minecraft 服务器。bossmc_forge-1.7.10是其中一个服务器,它运行的 JVM 是我的服务器。我还有一个 gitlab 容器和一个 splunk 容器,还有其他一些容器。

csysdig 命令与 top 的相似度比与 ps 的相似度高得多,但它的功能要多得多。总体而言,sysdig 的学习难度较大,但随着时间的推移,我发现我使用它的次数越来越多。容器感知等小细节对使其成为一款出色的工具大有裨益。

相关内容