Capítulo 6. Ejecución de imágenes de contenedores especiales
Utilice este capítulo para conocer algunos tipos especiales de imágenes de contenedores. Estos incluyen:
-
Toolbox: En lugar de sobrecargar un sistema anfitrión instalando las herramientas necesarias para depurar problemas o supervisar funciones, puede ejecutar el comando
toolbox
. Toolbox inicia una imagen de contenedorsupport-tools
que contiene herramientas que puede utilizar para ejecutar informes o diagnosticar problemas en el host. -
Runlabels: Algunas imágenes de contenedores tienen etiquetas incorporadas que permiten ejecutar esos contenedores con opciones y argumentos preestablecidos. El comando
podman container runlabel <label>
, le permite ejecutar el comando definido en ese<label>
para la imagen del contenedor. Las etiquetas soportadas soninstall
,run
yuninstall
.
6.1. Solución de problemas de hosts de contenedores con la caja de herramientas
En lugar de instalar las herramientas de solución de problemas directamente en su sistema RHEL 8, la utilidad toolbox
ofrece una forma de añadir temporalmente esas herramientas y luego descartarlas fácilmente cuando haya terminado. La utilidad toolbox
funciona de la siguiente manera:
-
Llevando la imagen de
registry.redhat.io/rhel8/support-tools
a su sistema local. - Arrancar un contenedor desde la imagen, y luego ejecutar un shell dentro del contenedor desde el que se puede acceder al sistema anfitrión.
El contenedor support-tools
le permite:
-
Ejecutar comandos que pueden no estar instalados en el sistema anfitrión, como
sosreport
,strace
, otcpdump
, de manera que les permita actuar en el sistema anfitrión. - Instalar más software dentro del contenedor para utilizarlo en el sistema anfitrión.
- Deseche el recipiente cuando haya terminado.
A continuación se ilustra una sesión típica de toolbox
.
Procedimiento
Asegúrese de que los paquetes
toolbox
ypodman
están instalados:# yum module list container-tools
Para instalar el conjunto completo de herramientas para contenedores, escriba:
# yum module install container-tools -y
Ejecute el comando de la caja de herramientas para extraer y ejecutar la imagen
support-tools
(introduciendo sus credenciales del Portal del Cliente de Red Hat cuando se le solicite):# toolbox Trying to pull registry.redhat.io/rhel8/support-tools... ... Would you like to authenticate to registry: 'registry.redhat.io' and try again? [y/N] y Username: johndoe Password: ************* Login Succeeded! Trying to pull registry.redhat.io/rhel8/support-tools...Getting image source signatures ... Storing signatures 30e261462851238d38f4ef2afdaf55f1f8187775c5ca373b43e0f55722faaf97 Spawning a container 'toolbox-root' with image 'registry.redhat.io/rhel8/support-tools' Detected RUN label in the container image. Using that as the default... command: podman run -it --name toolbox-root --privileged --ipc=host --net=host --pid=host -e HOST=/host -e NAME=toolbox-root -e IMAGE=registry.redhat.io/rhel8/support-tools:latest -v /run:/run -v /var/log:/var/log -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -v /:/host registry.redhat.io/rhel8/support-tools:latest
Abra un shell bash para ejecutar comandos dentro del contenedor:
# bash-4.4#
Desde el interior del contenedor, el sistema de archivos raíz del host está disponible en el directorio
/host
. Los otros directorios mostrados están todos dentro del contenedor.# ls / bin dev home lib lost+found mnt proc run srv tmp var boot etc host lib64 media opt root sbin sys usr
Intente ejecutar un comando dentro de su contenedor. El comando
sosreport
le permite generar información sobre su sistema para enviarla al soporte de Red Hat:bash-4.4# sosreport sosreport (version 3.6) This command will collect diagnostic and configuration information from this Red Hat Enterprise Linux system and installed applications. An archive containing the collected information will be generated in /host/var/tmp/sos.u82evisb and may be provided to a Red Hat support representative. ... Press ENTER to continue, or CTRL-C to quit. <Press ENTER> ... Your sosreport has been generated and saved in: /host/var/tmp/sosreport-rhel81beta-12345678-2019-10-29-pmgjncg.tar.xz The checksum is: c4e1fd3ee45f78a17afb4e45a05842ed Please send this file to your support representative.
Tenga en cuenta que el comando
sosreport
guarda el informe en el host (/host/var/tmp/sosreport-<ID>
).Instalar un paquete de software dentro del contenedor, para añadir herramientas que no están ya en el contenedor. Por ejemplo, para obtener un volcado del núcleo de un proceso en ejecución en el host, instale los paquetes
procps
ygcore
, utiliceps
para obtener el ID del proceso de un demonio en ejecución y, a continuación, utilicegcore
para obtener un volcado del núcleo:bash-4.4# yum install procps gdb -y bash-4.4# ps -ef | grep chronyd 994 809 1 0 Oct28 ? 00:00:00 /usr/sbin/chronyd bash-4.4# gcore -o /host/tmp/chronyd.core 809 Missing separate debuginfo for target:/usr/sbin/chronyd Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/96/0789a8a3bf28932b093e94b816be379f16a56a.debug ... Saved corefile /host/tmp/chronyd.core.809 [Inferior 1 (process 809) detached]
-
Para salir del contenedor y volver al host, escribe
exit
. El archivo se guarda en/host/tmp/chronyd.core.809
y está disponible desde/tmp/chronyd.core.809
en el host. Para eliminar el contenedor toolbox-root, escriba:
# podman rm toolbox-root
Puedes cambiar el nombre del registro, de la imagen o del contenedor utilizado por toolbox añadiendo lo siguiente:
-
REGISTRY: Cambia el registro del que se extrae la imagen de la caja de herramientas. Por ejemplo
REGISTRY=registry.example.com
-
IMAGE: Cambia la imagen que se utiliza. Por ejemplo,
IMAGE=mysupport-tools
-
TOOLBOX_NAME: Cambia el nombre asignado al contenedor en ejecución. Por ejemplo,
TOOLBOX_NAME=mytoolbox
La próxima vez que ejecute toolbox
, se utilizarán los nuevos valores del archivo .toolboxrc
.
6.1.1. Privilegios de apertura para el anfitrión
Cuando se ejecutan otros comandos desde el contenedor support-tools
(o cualquier contenedor privilegiado), pueden comportarse de manera diferente que cuando se ejecutan en un contenedor no privilegiado. Aunque sosreport
puede saber cuándo se está ejecutando en un contenedor, otros comandos necesitan que se les diga que actúen en el sistema anfitrión (el directorio /host
). Aquí hay ejemplos de funciones que pueden o no estar abiertas al host desde un contenedor:
-
Privileges: Un contenedor privilegiado (
--privileged
) ejecuta aplicaciones como usuario root en el host por defecto. El contenedor tiene esta capacidad porque se ejecuta con un contexto de seguridad SELinuxunconfined_t
. Así que puede, por ejemplo, eliminar archivos y directorios montados desde el host que son propiedad del usuario root. -
Process tables: A diferencia de un contenedor normal que sólo ve los procesos que se ejecutan dentro del contenedor, la ejecución de un comando
ps -e
dentro de un contenedor privilegiado (con--pid=host
configurado) le permite ver todos los procesos que se ejecutan en el host. Puedes pasar un ID de proceso del host a los comandos que se ejecutan en el contenedor privilegiado (por ejemplo,kill <PID>
). Sin embargo, con algunos comandos pueden surgir problemas de permisos cuando intentan acceder a los procesos desde el contenedor. -
Network interfaces: Por defecto, un contenedor sólo tiene una interfaz de red externa y una interfaz de red loopback. Con las interfaces de red abiertas al host (
--net=host
), puedes acceder a esas interfaces de red directamente desde el contenedor. -
Inter-process communications: La instalación IPC en el host es accesible desde el contenedor privilegiado. Puedes ejecutar comandos como
ipcs
para ver información sobre colas de mensajes activas, segmentos de memoria compartida y conjuntos de semáforos en el host.