これは何?
RHEL 8.1環境でPodmanを利用してコンテナを起動した際に発生した「runc create failed: unable to start container process: unable to apply cgroup configuration」エラーについて、発生原因とその解決方法、そしてなぜ解決に至ったのかをまとめます。
概要
Podmanでコンテナを起動しようとした際、以下のようなエラーが発生しました。
ERRO[0000] Starting some container dependencies
ERRO[0000] "runc: runc create failed: unable to start container process: unable to apply cgroup configuration: unable to start unit \"libpod-xxxxxxxx.scope\" ...: error creating systemd unit `libpod-xxxxxxxx.scope`: got `failed`: OCI runtime error"
Error: starting some containers: internal libpod error
エラーの切り分けとしてSELinuxを無効化してみた所、問題なく動くことが確認できました。
但し、SELinuxを恒久的に無効化するのはリスクがあるため、どうにかして回避できないかを検証した内容を記載します。
対応方法
エラー発生時の状況
- Podmanでコンテナを起動しようとすると、systemd unitの作成に失敗し、cgroupの設定適用ができずエラーとなる。
- SELinuxのenforcing状態や、Podmanのバージョン、依存パッケージの有無によって発生することがある。
解決までの流れ
-
エラーメッセージの確認
エラー内容から、cgroupやsystemd unitの作成に失敗していることが分かる。 -
SELinuxの設定・状態を確認
- SELinuxがEnforcingの場合、ポリシー不足によりアクセスが拒否されることがある。
-
setenforce 0
で一時的にPermissiveにするとエラーが発生しなくなる場合、SELinuxが原因の可能性が高い。
-
container-selinuxパッケージの導入
- 以下コマンドでパッケージをインストール。
dnf install -y container-selinux
- これにより、Podmanの動作に必要なSELinuxポリシー(container_t、container_file_tなど)が追加される。
- 以下コマンドでパッケージをインストール。
-
再度コンテナを起動
- container-selinux導入後、同じコマンドでコンテナを起動するとエラーが発生しなくなった。
補足
- 特殊なボリュームマウントや独自のファイル配置を行う場合は、
:z
や:Z
オプションでSELinuxラベルを明示的に指定することが推奨されます。 - それでも解決しない場合は、audit2allowやudicaでカスタムポリシーを作成する方法も検討してください。
まとめ
- Podman+SELinux環境で「runc create failed: unable to apply cgroup configuration」エラーが発生した場合、まず「container-selinux」パッケージが導入されているか確認することが重要。
- 標準的な運用であれば、このパッケージのインストールだけでコンテナ系のSELinux関連エラーが解消するはずです。
- 今回はインストールだけで済みましたが、場合によっては追加の設定やカスタムポリシーが必要なケースもあるため注意してください。
参考
[1] https://www.redhat.com/en/blog/container-permission-denied-errors
[2] https://github.com/containers/podman/issues/16936
[3] https://github.com/containers/podman/issues/14851
[4] https://bugzilla.redhat.com/show_bug.cgi?id=1897579
[5] https://docs.podman.io/en/v5.0.1/markdown/podman-run.1.html
[6] https://unix.stackexchange.com/questions/756982/podman-fails-with-error-relocating-relro-protection-failed-local-share
[7] https://access.redhat.com/solutions/7072912
[8] https://www.redhat.com/en/blog/user-namespaces-selinux-rootless-containers
[9] https://gitee.com/mgb/Podman/blob/master/troubleshooting.md
[10] https://github.com/containers/libpod/issues/2245