コンテナ化されたアプリケーションサービスの修復

DockerBeginner
オンラインで実践に進む

はじめに

コンテナ化されたアプリケーションサービスは、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 サービスの障害を診断し、利用可能なイメージと設定されたイメージタグを比較し、環境ファイルを修正してサービスを再起動し、実行中のコンテナとアプリケーションの準備完了ファイルを検証しました。