Mostrando o nome do contêiner do docker na lista ps

0

Eu tenho um container Ubuntu muito simples com o apache rodando nele. Quando eu iniciei o container com:

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

onde 192.168.189.134 é o meu endereço IP e analiso os processos no host do docker, vejo:

$ sudo ps -ef | grep docker root 35701 1 0 13:46 ?
00:00:14 /usr/bin/docker daemon 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

e:

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

Então, depois de colocar o Z do SELinux nisso, posso confirmar que o processo do apache2 está vindo de um contêiner docker. De volta aos meus dias, quando eu estava configurando os Solaris Containers, era realmente possível ver o nome da zona (isso era chamado de zona) na lista de ps (se bem me lembro, também era ps -efZ, mas Z tinha um significado totalmente diferente então).

Ao executar um contêiner, isso não é tão desastroso, mas ao executar 10, não é possível rastrear o processo até o contêiner. Então: Existe uma maneira de fazer isso no host do docker, sem o docker commnd?

    
por Willem 06.11.2015 / 15:04

1 resposta

0

O comando antigo regular ps não está ciente do docker, portanto, não é possível ver nomes de contêiner usando isso.

Existe uma ferramenta chamada sysdig que é realmente muito poderosa. Pode mostrar muitas coisas diferentes e é ciente do recipiente.

A única coisa que alguns podem considerar uma desvantagem é que o sysdig requer um módulo do kernel para funcionar. Ele coleta dados sobre o que os processos estão realmente fazendo e pode obter insights realmente significativos sobre a saúde e o status de qualquer coisa em um sistema.

Eu normalmente executo a ferramenta csysdig para obter uma ferramenta de tipos interativos curses.

A execução de sudo csysdig -pc fornece a seguinte visualização dos processos:

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%)

Isso mostra onde cada processo está sendo executado. Por exemplo, eu tenho alguns servidores de minecraft. bossmc_forge-1.7.10 é um desses servidores e está executando uma JVM que é o meu servidor. Eu também tenho um contêiner gitlab e um contêiner, entre outros.

O comando csysdig está muito mais próximo do topo do que do ps, mas pode fazer um pouco mais. No geral, o sysdig tem uma curva de aprendizado, mas estou me acostumando a usá-lo mais e mais com o tempo. Pequenas coisas como ter consciência sobre contêineres são um grande passo para torná-lo uma ótima ferramenta.

    
por 18.10.2016 / 16:54