3.2.3. Investigación dentro de un contenedor
Para investigar dentro de un contenedor en ejecución, puede utilizar el comando podman exec
. Con podman exec
, puede ejecutar un comando (como /bin/bash
) para entrar en un proceso de contenedor en ejecución para investigar ese contenedor.
La razón para usar podman exec
, en lugar de simplemente lanzar el contenedor en un shell bash, es que puedes investigar el contenedor mientras está ejecutando su aplicación prevista. Al adjuntar al contenedor mientras está realizando su tarea prevista, se obtiene una mejor visión de lo que el contenedor realmente hace, sin necesariamente interrumpir la actividad del contenedor.
Aquí hay un ejemplo usando podman exec
para mirar dentro de un rsyslog
en funcionamiento, y luego mirar dentro de ese contenedor.
Launch a container
: Lanza un contenedor como la imagen del contenedorrsyslog
descrita anteriormente. Escribapodman ps
para asegurarse de que se está ejecutando:# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 74b1da000a11 rsyslog:latest "/usr/rsyslog.sh 6 minutes ago Up 6 minutes rsyslog
Entre en el contenedor con
podman exec
: Utilice el ID o el nombre del contenedor para abrir un shell bash y acceder al contenedor en ejecución. A continuación, puede investigar los atributos del contenedor de la siguiente manera:# 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
Los comandos que se acaban de ejecutar desde el shell bash (que se ejecuta dentro del contenedor) muestran varias cosas.
- El contenedor fue construido a partir de una imagen RHEL release 8.0.
-
La tabla de procesos (
ps -ef
) muestra que el comando/usr/sbin/rsyslogd
es el proceso ID 1. -
Los procesos que se ejecutan en la tabla de procesos del host no se pueden ver desde el contenedor. Aunque el proceso
rsyslogd
puede verse en la tabla de procesos del host (era el proceso ID 19593 en el host). -
No hay un kernel separado que se ejecute en el contenedor (
uname -r
muestra el kernel del sistema anfitrión). -
El comando
rpm -qa
le permite ver los paquetes RPM que están incluidos dentro del contenedor. En otras palabras, hay una base de datos RPM dentro del contenedor. -
La visualización de la memoria (
free -m
) muestra la memoria disponible en el host (aunque lo que el contenedor puede usar realmente puede limitarse usando cgroups).