Q:ある名前空間から別の名前空間にマウントを移動/コピーする方法はありますか?
説明: コンテナーの作成時に存在しないディレクトリーをマウントしたいと思います。
- コンテナを作成しています。ホストマウント名前空間の独自のコピーを取得します。
- ホストが一部を作成します。
SourceDirectory
- ホスト内部からインストール(共有オプションを有効にする)をバインドします
SourceDirectory
。/container_rootfs/tempDirectory
- コンテナ内でファイルを読み書きしようとしています
/tempDirectory
。SourceDirectory
ステップ4。手順3では、共有バインディングマウントは現在のホストの名前空間共有のみをマウントし、コンテナの名前空間は以前に「分割」されているため機能しません。/tempDirectory
3段階は全くできないと思います。
ディレクトリが存在しマウントされた場合今後コンテナを作成すると(作業順序は2> 3> 1> 4の上の番号付きのリストにあります)、コンテナにマウント名前空間がコピーされたので、すべてがうまく機能します。後ろに追加のバンドルインストールが作成されました。に保存するとに/tempDirectory
送信されますSourceDirectory
。
だから私の質問は - ある名前空間(私のホストインストール名前空間)から別の名前空間(コンテナインストール名前空間)にインストールを移動/コピーする方法はありますか?
これが関連している場合(そうではないと思います)、コンテナにクランを使用します。
ベストアンサー1
既存のマウントを遡ってコピーしたり移動する方法はわかりませんが...
mount --bind
コンテナの名前空間から直接コマンドを実行できます。エルンスル。
コンテナで実行されているプロセスのpid(プロセスID)を識別する必要があります。見つかる限り、コンテナ内のすべてのプロセスを使用できます。
- 私はあなたの注意を引きます
--pid-file
実行オプション。 ps -ef
失敗した場合は、コンテナで実行されているプロセスの検索を使用する必要があります。コンテナはpid名前空間にあり、コンテナ内のホストに異なるpidを提供できます。ホストが見るpidが必要です。
コンテナ化されたプロセスにpidがあると仮定すると、以下を4321
使用してマウントできる必要があります。
nsenter -mt 4321 mount --bind SourceDirectory /container_rootfs/
実験するには、nsenter
まず対話型コマンドラインを使用して試してみることをお勧めします。コンテナ化されたプロセスのpidが次を使用する場合4321
:
nsenter -mt 4321 /bin/bash
名前空間をマウントしてchroot。コンテナ化されたプロセスは独自のマウントネームスペースに配置されますが、ルートも変更されます。これを行う方法によっては、nsenter
chrootが発生したり、そうでない場合があります。
コンテナの起動後にマウントした場合は、SourceDirectory
コンテナの名前空間にまったくマウントされていない場合は、以前と同じ方法でマウントすることができます。
私が読んだことの中からmount /dev/sda4
パーティションを2回マウントできるため、すでにホストで実行している場合は、通常mount /dev/sda4
コンテナで実行することをお勧めします。結果はバインドマウントの使用と同じです。