共有解除によって生成されたプロセス名前空間を終了した後に新しいプロセス名前空間を作成する方法はわかりません。たとえば、次のようなものがあります。
unshare -f --mount-proc --mount=/containers/1/ns/mnt --pid=/containers/1/ns/pid
別の端末でこの名前空間を入力します。
nsenter --mount=/containers/1/ns/mnt --pid=/containers/1/ns/pid
共有解除によって開始されたシェルを終了すると、再び入ることはできません。
nsenter:フォーク失敗:メモリを割り当てられません。
私はそれから次のアイデアを得ました。中間位置。しかし、これは毎回新しいプロセス名前空間を作成しますが、これは私が望むものではありません。
nsenter --mount=/containers/1/ns/mnt unshare -f --mount-proc --pid
pidファイルと連携させることはできず、問題が何であるかを理解していません。
nsenter --mount=/containers/1/ns/mnt unshare -f --mount-proc --pid=/containers/1/ns/pid
unshare: cannot stat /proc/11379/ns/mnt: No such file or directory
共有解除されたシェルでnsenterを実行してみましたが、次のような結果が得られました。
nsenter: 'ns/mnt' 名前空間の再接続に失敗しました: 無効な引数
最後に、私が望むように動作すると思う解決策を見つけましたが、最初のプロセスが正しいインストール名前空間にないため、厄介で2つのプロセスを作成する必要があります。
# Terminal 1
unshare -f --mount-proc --pid=/containers/1/ns/pid
# Terminal 2
nsenter --mount=/containers/1/ns/mnt --pid=/containers/1/ns/pid unshare -f --mount-proc
元のプロセス名前空間を終了してスクリプトを再実行してインストール名前空間のすべてのエントリを設定すると、再起動できますが、毎回完全に再起動せずにこれを行う方法があると思います。
答え1
私はついに次のことを見つけました。ヒントは、入力プロセスの名前空間とマウントプロセスの間に入力マウントの名前空間を挟む必要があることです。この--mount-proc
フラグは新しいマウントネームスペースを意味します。明らかに、unshareを使用してマウントネームスペースを作成した後は、既存のマウントネームスペースに移動することはできません。再接続エラーメッセージ。
# Terminal 1
unshare --pid=/containers/1/ns/pid -f nsenter --mount=/containers/1/ns/mnt unshare --mount-proc
# Terminal 2
nsenter --pid=/containers/1/ns/pid --mount=/containers/1/ns/mnt unshare --mount-proc
これの欠点の1つは、ターミナル1と2のシェルが別々のマウントネームスペースにあるため、既存のマウントを共有しても、1つのターミナルの将来の変更が別のターミナルで表示されないことです。しかし、どうせそうしても役に立たないことに気づきました。マウントネームスペースは再起動後も維持されないため、これらの問題に陥るのではなく、スクリプトを再実行することをお勧めします。