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