Reparar un servicio de aplicación en contenedor

DockerBeginner
Practicar Ahora

Introducción

Un servicio de aplicación en contenedor consta de varias capas: la unidad de systemd, el comando envoltorio (wrapper), la referencia a la imagen, el tiempo de ejecución del contenedor y la salida de la aplicación. Una etiqueta de imagen incorrecta puede provocar que el servicio falle antes de que la aplicación se inicie.

En este laboratorio, rhce-container-app.service utiliza Podman para ejecutar un contenedor UBI 10 minimal. La imagen correcta ya ha sido descargada, pero el archivo de entorno del servicio apunta a una etiqueta inexistente. Usted diagnosticará el fallo, reparará la etiqueta de la imagen, reiniciará el servicio y verificará el contenedor en ejecución.

Confirmar el fallo del servicio de contenedor

En este paso, inspeccionará la unidad de systemd fallida antes de modificar la configuración del contenedor.

Acceda al directorio del proyecto y cree un espacio de trabajo.

cd /home/labex/project
mkdir -p container-service

Compruebe el estado del servicio.

systemctl is-failed rhce-container-app.service || true

Guarde las propiedades seleccionadas del servicio.

systemctl show rhce-container-app.service -p ActiveState -p Result -p ExecMainStatus | tee container-service/service-state.txt

Lea los registros recientes del servicio.

sudo journalctl -u rhce-container-app.service -n 20 --no-pager

El servicio falla antes de que la aplicación cree su archivo de preparación (ready file).

Inspeccionar las imágenes y el archivo de entorno

En este paso, comparará la imagen disponible localmente con la etiqueta de imagen utilizada por el servicio.

Enumere las imágenes locales.

sudo podman images | tee container-service/images.txt

Lea el archivo de entorno del servicio.

sudo cat /etc/rhce-container/app.env | tee container-service/env-before.txt

Muestre el comando envoltorio.

sudo sed -n '1,16p' /usr/local/bin/rhce-container-run

La etiqueta de la imagen local es latest, pero el servicio apunta a missing.

Reparar la etiqueta de la imagen

En este paso, actualizará únicamente el archivo de entorno del servicio para que utilice la etiqueta de la imagen descargada.

Reemplace la etiqueta incorrecta.

sudo sed -i 's/:missing/:latest/' /etc/rhce-container/app.env

Guarde el entorno reparado.

sudo cat /etc/rhce-container/app.env | tee container-service/env-after.txt

El servicio ahora apunta a la imagen que existe localmente.

Reiniciar el servicio de contenedor

En este paso, borrará el estado de fallo y reiniciará el contenedor gestionado por systemd.

Restablezca el estado de fallo.

sudo systemctl reset-failed rhce-container-app.service

Reinicie el servicio.

sudo systemctl restart rhce-container-app.service

Guarde el estado activo.

systemctl is-active rhce-container-app.service | tee container-service/service-final.txt

El servicio debería permanecer activo ahora, ya que Podman puede utilizar la imagen corregida.

Verificar el contenedor en ejecución

En este paso, comprobará Podman y el archivo de preparación de la aplicación.

Enumere el contenedor en ejecución.

sudo podman ps --filter name=rhce-container-app --format "{{.Names}} {{.Status}}" | tee container-service/container-state.txt

Lea el archivo de preparación creado por el contenedor.

cat /srv/rhce-container/ready.txt | tee container-service/ready.txt

El servicio en contenedor está ejecutándose y ha producido la salida esperada.

Resumen

Usted diagnosticó un servicio de Podman gestionado por systemd que fallaba, comparó la imagen disponible con la etiqueta de imagen configurada, reparó el archivo de entorno, reinició el servicio y verificó el contenedor en ejecución y el archivo de preparación de la aplicación.