podman のコンテナやポッドを自動起動する


CentOS 8 で、 podman のコンテナやポッドをホストの起動時に自動起動する方法です。自分で systemd の unit ファイルを作ったらうまくいかなかったのですが、便利なコマンドがありました。

Unit ファイルの作成

systemd の設定ファイルを作成します。 systemctl start する時に指定するファイルです。podman generate systemd コマンドを使用します。

cd /etc/systemd/system
podman generate systemd --name --restart-policy always -f [container/pod]

このコマンドを実行すると、 container-[コンテナ名].service または pod-[ポッド名].service ファイルが生成されます。–name オプションを付けると名称がファイル名に、外すと ID がファイル名に(container-cc34a46d0bcc[略].service)なります。

-f オプションはファイル出力するというオプションです。外すと標準出力に出るので、どんなファイルが生成されるか確認したり、ファイル名を自由に決めたい場合は -f を外して使用します。

–restart-policy は systemd の Restart オプションです。コンテナが止まった場合の動作設定です。何かのトラブルで無限再起動になるのが気になるのであれば on-failure か no を指定するとよいと思います。

その他のオプションについては man podman-generate-systemd で確認できます。

.service ファイルを書き換えた場合、以下のコマンドを実行することで再読み込みされます。

systemctl daemon-reload

systemctl コマンドで起動してみる

先にコンテナ(またはポッド)を停止しておきます。

podman stop [container]
podman pod stop [pod]

次に start コマンドを実行してみます。 先ほど作成した unit ファイルの名前に置き換えて実行してください。.service は省略できます。

systemctl start container-xxxx.service
systemctl start pod-xxxxx.service

動作確認

起動できているかログを見てみましょう。また、以下のコマンドで起動状態を確認できます。

systemctl status container-xxxx.service
systemctl status pod-xxxxx.service

自動起動設定

enable コマンドで起動時に自動で実行するようにします。

systemctl enable container-xxxx.service
systemctl enable pod-xxxxx.service

reboot してみて、自動で起動するか試してみてください。

その他コマンド

systemctl の使い方の話になりますが、 サービスの停止は stop を使用します。

systemctl stop container-xxxx.service
systemctl stop pod-xxxxx.service

自動起動の停止は disable です。

systemctl disable container-xxxx.service
systemctl disable pod-xxxxx.service

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください