から参考::
デフォルトでは、新しい名前空間は、少なくとも 1 つのメンバー プロセスが存在する間のみ存在し続けます。対応する /proc/PID/ns/ns-type ファイルをバインド マウントすることで、名前空間を永続化 (つまり、メンバー プロセスが存在しない場合でも存在を固定) することができます。
バインド マウント ソースのファイル パスで使用されている PID はどれですか? 名前空間を作成するときのバインド マウント ポイントの重要な点は、名前空間が PID の存在に依存しないことではないでしょうか?
clone()
フラグを使用してネットワーク名前空間を作成しCLONE_NEWNET
、作成された新しいプロセスの PID を使用してバインド マウントを作成し、新しいプロセスを強制終了すると、ファイルは消えると思われます/proc/PID/ns/net
が、その後/var/run/netns/<netns name>
も削除され、ネットワーク名前空間は保持されなくなります。
答え1
プロセス内で実行されるユーザーランド ソフトウェアは、プロセスの外部に名前空間を作成することはできません。
したがって、名前空間を作成するプロセス (またはその子プロセスのいずれか) の PID を使用します。
CLONE_NEWNETフラグを使用してclone()でネットワーク名前空間を作成し、作成された新しいプロセスのPIDを使用してバインドマウントを作成し、新しいプロセスを強制終了すると、/proc/PID/ns/netファイルが消えると思います。
ここでは、大きな引用符で囲んだ「ファイル」を取り上げます。仮想ファイルシステムのエントリは消えますが...
しかし、/var/run/netns/も削除されてしまう
「削除」は実際のファイルに対して行うもので、ここでは適用できません。PIDは消えますが、そのPIDを含むパスの下の仮想ファイルシステムエントリとしてアクセスできるものはアクセスできなくなります。それ方法。しかし:
しかし、その場合、/var/run/netns/ も削除され、ネットワーク名前空間は保持されなくなります。
これは間違っています。バインド マウントによりカーネル内部の参照が名前空間に追加されるため、名前空間は未使用にならず、永続化されるからです。