1

У меня есть очень простой контейнер Ubuntu с работающим apache. Когда я начал контейнер с:

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

где 192.168.189.134 - мой IP-адрес, и, глядя на процессы на хосте докера, я вижу:

$ 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 ПРЕДИСЛОВИЕ www-data 37857 37856 0 14:47? 00:00:00 /usr /sbin /apache2 -D ПРЕДИСЛОВИЕ www-data 37858 37856 0 14:47? 00:00:00 /usr /sbin /apache2 -D ЗАГЛУШЕННЫЙ корень 37950 3465 0 14:54 pts /0
00:00:00 grep --color = auto apache

а также:

root @ willems-vm:/# ps -efZ | grep docker не ограничен
root 35701 1 0 13:46? 00:00:14 /usr /bin /docker неограниченный корень демона 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 ЗАПРОС docker-default www-data 37857 37856 0 14:47? 00:00:00 /usr /sbin /apache2 -D ЗАПРОС docker-default www-data 37858 37856 0 14:47? 00:00:00 /usr /sbin /apache2 -D FOREGROUND неограниченный корень 37952 3465 0 14:55 pts /0 00:00:00 grep --color = auto docker

Поэтому, поместив Z SELinux в это, я могу подтвердить, что процесс apache2 идет из контейнера Docker. В мои хорошие дни, когда я настраивал контейнеры Solaris, было действительно возможно увидеть имя зоны (это называлось зоной) в списке ps (если я помню, это был также ps -efZ, но Z имел тогда совершенно другое значение).

При запуске одного контейнера это не так катастрофично, но при запуске 10 вы не можете отследить процесс до контейнера. Итак: Есть ли способ сделать это на хосте докера, без док-станции?

1 ответ1

0

Обычная старая команда 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 и контейнер spunk, среди нескольких других.

Команда csysdig намного ближе к началу, чем к ps, но она может сделать немного больше. В целом, у sysdig есть некоторая кривая обучения, но я обнаруживаю, что использую ее все чаще и чаще. Маленькие вещи, такие как знание контейнера, имеют большое значение, чтобы превратить его в отличный инструмент.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .