
私はArchlinux上でLXCを実行しています。
私は、それぞれ systemd をベースにした Arch、Fedora、Centos、Debian、Ubuntu LXC コンテナーを組み合わせて使用しています。
19 個を超える LXC コンテナを開こうとすると、20 番目のコンテナは起動しますが、内部で systemd は実行されません。( 、、ps aux
のみが表示されます)bash
init
ps
これは開いているファイルの数に関係しているのではないかと思いました。なぜなら、多数のLXCコンテナを実行しているときに、Centosコンテナを実行すると、「開いているファイルが多すぎます」と報告されることがあったからですpoweroff
。しかし、ファイル制限を増やしました。このリンクに記載されている通り再起動して変更を確認しましたが、問題は解決しません。
何が原因なのでしょうか?
答え1
特権コンテナ(つまり、root)ではなく、非特権コンテナ(つまり、ユーザー名前空間を使用)で問題が発生する場合、これは、コンテナを実行している同じユーザーに対するinotifyインターフェースの使用の制限によって発生すると思います。どうやらsystemdはinotifyに依存しています。Debian buster LXCパッケージには、sysctlを緩める設定が含まれていますfs.inotify.max_user_instances
。/etc/sysctl.d/30-lxc-inotify.conf
:
# Defines the maximum number of inotify listeners. # By default, this value is 128, which is quickly exhausted when using # systemd-based LXC containers (15 containers are enough). # When the limit is reached, systemd becomes mostly unusable, throwing # "Too many open files" all around (both on the host and in containers). # See https://kdecherf.com/blog/2015/09/12/systemd-and-the-fd-exhaustion/ # Increase the user inotify instance limit to allow for about # 100 containers to run before the limit is hit again fs.inotify.max_user_instances = 1024
のこの設定に関連するドキュメント伝える:
/proc/sys/fs/inotify/max_user_instances
これは、実ユーザー ID ごとに作成できる inotify インスタンスの数の上限を指定します。
LXC インストールにそのような設定が含まれていない場合は、ホスト上で実行しているかどうかを確認できます。
sysctl -w fs.inotify.max_user_instances=1024
問題は解決します。