Red Hat Training

A Red Hat training course is available for RHEL 8

3.2.3. Investigando dentro de um contêiner

Para investigar dentro de um contêiner em funcionamento, você pode usar o comando podman exec. Com podman exec, você pode executar um comando (como /bin/bash) para entrar em um processo de contêiner em funcionamento para investigar esse contêiner.

A razão para usar podman exec, em vez de apenas lançar o recipiente em uma concha bash, é que você pode investigar o recipiente enquanto ele está rodando sua aplicação pretendida. Anexando-se ao contêiner enquanto ele está executando sua tarefa pretendida, você obtém uma visão melhor do que o contêiner realmente faz, sem necessariamente interromper a atividade do contêiner.

Aqui está um exemplo usando o site podman exec para procurar em um rsyslog em funcionamento, depois procure dentro desse recipiente.

  1. Launch a container: Lançar um recipiente como a imagem do recipiente rsyslog descrita anteriormente. Digite podman ps para ter certeza de que ele está funcionando:

    # podman ps
    CONTAINER ID   IMAGE           COMMAND           CREATED       STATUS        PORTS   NAMES
    74b1da000a11   rsyslog:latest "/usr/rsyslog.sh   6 minutes ago Up 6 minutes          rsyslog
  2. Digite o recipiente com podman exec: Use o ID ou nome do recipiente para abrir uma concha bash para acessar o recipiente em funcionamento. Em seguida, você pode investigar os atributos do contêiner da seguinte forma:

    # podman exec -it 74b1da000a11 /bin/bash
    [root@74b1da000a11 /]# cat /etc/redhat-release
    Red Hat Enterprise Linux release 8.0
    [root@74b1da000a11 /]# yum install procps-ng
    [root@74b1da000a11 /]# ps -ef
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 15:30 ?        00:00:00 /usr/sbin/rsyslogd -n
    root         8     0  6 16:01 pts/0    00:00:00 /bin/bash
    root        21     8  0 16:01 pts/0    00:00:00 ps -ef
    [root@74b1da000a11 /]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          39G  2.5G   37G   7% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           1.5G  8.7M  1.5G   1% /etc/hosts
    shm              63M     0   63M   0% /dev/shm
    tmpfs           1.5G     0  1.5G   0% /sys/fs/cgroup
    tmpfs           1.5G     0  1.5G   0% /proc/acpi
    tmpfs           1.5G     0  1.5G   0% /proc/scsi
    tmpfs           1.5G     0  1.5G   0% /sys/firmware
    [root@74b1da000a11 /]# uname -r
    4.18.0-80.1.2.el8_0.x86_64
    [root@74b1da000a11 /]# rpm -qa | more
    redhat-release-8.0-0.44.el8.x86_64
    filesystem-3.8-2.el8.x86_64
    basesystem-11-5.el8.noarch
    ncurses-base-6.1-7.20180224.el8.noarch
    ...
    bash-4.2# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1941         560         139          10        1241        1189
    Swap:          1023          15        1008
    [root@74b1da000a11 /]# exit

Os comandos apenas funcionam a partir do bash shell (que corre dentro do contêiner) e mostram várias coisas.

  • O container foi construído a partir de uma imagem RHEL release 8.0.
  • A tabela de processos (ps -ef) mostra que o comando /usr/sbin/rsyslogd é o ID de processo 1.
  • Os processos em execução na tabela de processos do host não podem ser vistos de dentro do contêiner. Embora o processo rsyslogd possa ser visto na tabela de processos do host (era o ID do processo 19593 no host).
  • Não há kernel separado rodando no recipiente (uname -r mostra o kernel do sistema hospedeiro).
  • O comando rpm -qa permite que você veja os pacotes RPM que estão incluídos dentro do contêiner. Em outras palavras, há um banco de dados RPM dentro do contêiner.
  • A visualização da memória (free -m) mostra a memória disponível no host (embora o que o container pode realmente usar possa ser limitado usando cgroups).