Réparer un service d'application conteneurisé

DockerBeginner
Pratiquer maintenant

Introduction

Un service d'application conteneurisé comporte plusieurs couches : l'unité systemd, la commande wrapper, la référence de l'image, le runtime du conteneur et la sortie de l'application. Une balise d'image incorrecte peut entraîner l'échec du service avant même que l'application ne démarre.

Dans ce laboratoire, rhce-container-app.service utilise Podman pour exécuter un conteneur minimal UBI 10. L'image correcte est déjà téléchargée, mais le fichier d'environnement du service pointe vers une balise erronée. Vous allez diagnostiquer la défaillance, corriger la balise de l'image, redémarrer le service et vérifier que le conteneur fonctionne correctement.

Confirmer la défaillance du service de conteneur

Dans cette étape, vous allez inspecter l'unité systemd défaillante avant de modifier la configuration du conteneur.

Accédez au répertoire du projet et créez un espace de travail.

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

Vérifiez l'état du service.

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

Enregistrez les propriétés sélectionnées du service.

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

Lisez les journaux récents du service.

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

Le service échoue avant que l'application ne puisse créer son fichier de disponibilité.

Inspecter les images et le fichier d'environnement

Dans cette étape, vous allez comparer l'image disponible localement avec la balise d'image utilisée par le service.

Listez les images locales.

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

Lisez le fichier d'environnement du service.

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

Affichez la commande wrapper.

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

La balise de l'image locale est latest, mais le service pointe vers missing.

Réparer la balise de l'image

Dans cette étape, vous allez mettre à jour uniquement le fichier d'environnement du service afin qu'il utilise la balise de l'image téléchargée.

Remplacez la balise incorrecte.

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

Enregistrez l'environnement réparé.

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

Le service pointe désormais vers l'image présente localement.

Redémarrer le service de conteneur

Dans cette étape, vous allez réinitialiser l'état d'échec et redémarrer le conteneur géré par systemd.

Réinitialisez l'état d'échec.

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

Redémarrez le service.

sudo systemctl restart rhce-container-app.service

Enregistrez l'état actif.

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

Le service devrait maintenant rester actif car Podman peut utiliser l'image corrigée.

Vérifier le conteneur en cours d'exécution

Dans cette étape, vous allez vérifier Podman et le fichier de disponibilité de l'application.

Listez le conteneur en cours d'exécution.

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

Lisez le fichier de disponibilité créé par le conteneur.

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

Le service conteneurisé est en cours d'exécution et a produit la sortie attendue.

Résumé

Vous avez diagnostiqué un service Podman géré par systemd en échec, comparé l'image disponible avec la balise d'image configurée, réparé le fichier d'environnement, redémarré le service et vérifié le conteneur en cours d'exécution ainsi que le fichier de disponibilité de l'application.