はじめに
コンテナ化されたアプリケーションサービスは、systemd ユニット、ラッパーコマンド、イメージ参照、コンテナランタイム、そしてアプリケーションの出力といった複数のレイヤーで構成されています。イメージタグが誤っていると、アプリケーションが起動する前にサービスが失敗してしまいます。
この実験では、rhce-container-app.service が Podman を使用して UBI 10 minimal コンテナを実行します。正しいイメージはすでにプルされていますが、サービスの環境ファイルが誤ったタグを指しています。障害を診断し、イメージタグを修正してサービスを再起動し、実行中のコンテナを検証します。
コンテナサービスの障害確認
このステップでは、コンテナの設定を変更する前に、失敗した systemd ユニットを調査します。
プロジェクトディレクトリに移動し、ワークスペースを作成します。
cd /home/labex/project
mkdir -p container-service
サービスの状態を確認します。
systemctl is-failed rhce-container-app.service || true
選択したサービスのプロパティを保存します。
systemctl show rhce-container-app.service -p ActiveState -p Result -p ExecMainStatus | tee container-service/service-state.txt
最近のサービスログを読み取ります。
sudo journalctl -u rhce-container-app.service -n 20 --no-pager
アプリケーションが準備完了ファイルを作成する前に、サービスが失敗していることがわかります。
イメージと環境ファイルの調査
このステップでは、ローカルで利用可能なイメージと、サービスで使用されているイメージタグを比較します。
ローカルイメージを一覧表示します。
sudo podman images | tee container-service/images.txt
サービスの環境ファイルを読み取ります。
sudo cat /etc/rhce-container/app.env | tee container-service/env-before.txt
ラッパーコマンドを表示します。
sudo sed -n '1,16p' /usr/local/bin/rhce-container-run
ローカルのイメージタグは latest ですが、サービスは missing を指していることがわかります。
イメージタグの修復
このステップでは、サービス環境ファイルを更新し、プル済みのイメージタグを使用するように修正します。
誤ったタグを置換します。
sudo sed -i 's/:missing/:latest/' /etc/rhce-container/app.env
修復された環境設定を保存します。
sudo cat /etc/rhce-container/app.env | tee container-service/env-after.txt
これで、サービスはローカルに存在するイメージを指すようになりました。
コンテナサービスの再起動
このステップでは、失敗状態をクリアし、systemd で管理されているコンテナを再起動します。
失敗状態をリセットします。
sudo systemctl reset-failed rhce-container-app.service
サービスを再起動します。
sudo systemctl restart rhce-container-app.service
アクティブ状態を保存します。
systemctl is-active rhce-container-app.service | tee container-service/service-final.txt
Podman が修正されたイメージを使用できるようになったため、サービスはアクティブな状態を維持するはずです。
実行中のコンテナの検証
このステップでは、Podman の状態とアプリケーションの準備完了ファイルを確認します。
実行中のコンテナを一覧表示します。
sudo podman ps --filter name=rhce-container-app --format "{{.Names}} {{.Status}}" | tee container-service/container-state.txt
コンテナによって作成された準備完了ファイルを読み取ります。
cat /srv/rhce-container/ready.txt | tee container-service/ready.txt
コンテナ化されたサービスが実行され、期待通りの出力が生成されていることが確認できました。
まとめ
systemd で管理された Podman サービスの障害を診断し、利用可能なイメージと設定されたイメージタグを比較し、環境ファイルを修正してサービスを再起動し、実行中のコンテナとアプリケーションの準備完了ファイルを検証しました。



