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 Copiar enlaceEnlace copiado en el portapapeles!
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
# yum module list container-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Para instalar el conjunto completo de herramientas para contenedores, escriba:
yum module install container-tools -y
# yum module install container-tools -y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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):Copy to Clipboard Copied! Toggle word wrap Toggle overflow Abra un shell bash para ejecutar comandos dentro del contenedor:
bash-4.4#
# bash-4.4#
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 /
# ls / bin dev home lib lost+found mnt proc run srv tmp var boot etc host lib64 media opt root sbin sys usr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
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
# podman rm toolbox-root
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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 Copiar enlaceEnlace copiado en el portapapeles!
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.