RHEL8 (CentOS8)からは、Dockerが同梱されておらず、代わりにPodmanが提供されています。PodmanはDockerのようにデーモンがおらず、機能もシンプルです。ここでは、Podmanで起動したコンテナのログの保存方法について紹介します。
podman run コマンドで起動したコンテナのログは、通常はpodmanの管理領域に保存され、コンテナを削除すると削除されてしまいます。これだと、実際の運用では古いログが参照できなくて困ってしまいます。これを避けるには、ログドライバーをコンテナ起動時に指定します。
ここでは、CentOS 8のPodmanを前提に書きますが、以下のように、--log-driver journald というオプションを付けると、コンテナのログがjournaldに出力されるようになります。
# podman run -d --log-driver journald nginx
CentOS 8では、journald に出力されたログは、デフォルトでrsyslogを経由して/var/log/messagesに保存されるため、これによりコンテナのログを永続化することができるようになります。Dockerだと、ログ設定をデフォルトの設定で変更できるようですが、Podmanではそのような設定ファイルがないようで、podman run 時に毎回付与する必要がありそうです。
なお、Dockerの場合、--name nginx のようなオプションを付けると、journaldのログのメタデータにCONTAINER_NAME=nginx といった情報が付与されるため、journalctl -o json コマンドで見るとどのコンテナのログか簡単に判別できますし、rsyslogのフィルタ設定によってコンテナ名でログファイルを分けることができるのですが、2020年9月現在のCentOS 8のpodman はこのメタデータが付与されませんでした。この不具合は、GitHubのこちらのIssueで修正されたようなので、そのうち正常に本メタデータも保存されるようになりそうです。