LXC:ホストからコンテナにフォルダをマウントするにはどうすればよいですか?


24

ホスト上のフォルダーをLXCコンテナーにマウントしようとしています。

ホストにはフォルダーが/mnt/ssd/solr_data作成されています(これは現在ルートファイルシステム上にありますが、後でSSDドライブをマウントするので、その準備をしています)。

そのフォルダーを/dataコンテナー内でマウントするようにします。

そのため、コンテナのfstabファイルには次のものがあります。

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        ext4    defaults,noatime        0       0

しかし、それは無意味です、私はコンテナを開始するこのエラーを受け取ります:

lxc-start: No such file or directory - failed to mount '/mnt/ssd/solr_data' on '/usr/lib/x86_64-linux-gnu/lxc//data'
lxc-start: failed to setup the mounts for 'Solr4StandAlone'
lxc-start: failed to setup the container
lxc-start: invalid sequence number 1. expected 2
lxc-start: failed to spawn 'Solr4StandAlone'

回答:


16

コンテナにディレクトリを自動的に作成するにcreate=dirは、fstabにオプションを追加することもできます。

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind,create=dir

編集:これはLXCに固有のものです。このスレッドを見る

すでに「オプション」があったように、これにより2つの新しいLXC固有のマウントフラグが追加されます。

  • create = dir(パスでmkdir_pを実行します)

  • create = file(dirnameでmkdir_p +パスでfopenを実行します)

これは、特権のないコンテナに必要なバインドマウントのいくつかが動機となっています。


1
これはどのバージョンにmount適用されますか?mount(8)たとえば、Ubuntu 14.04で説明されているオプションが見つかりませんでした。
0xC0000022L 14年

また、いないで、最新のmount(8)
0xC0000022L

2
確かに... lxcでのみ動作するようです。lxc-devel MLでこのスレッドを
少しおい14年

14

では/var/lib/lxc/Solr4StandAlone/configラインの読み取りを追加します。

lxc.mount.entry = /mnt/ssd/solr_data  /var/lib/lxc/Solr4StandAlone/rootfs/data none bind 0 0

その後lxc-stop、コンテナとlxc-startコンテナを再度停止します。

必要なのはそれだけです。

ref:参照リンク


2
特権のないLXCコンテナツールで動作するため、ソリューションのレビューを改善する必要があります。この場合、他のものは動作しません。また、おそらくselinux / apportを調整してメソッドを許可する必要があります。ソリューションの+1!
ホイヘンス

11

/dataマウントが正しく機能する前に、ローカルコンテナーにフォルダーを作成する必要がありました。

このfstabエントリも使用しました。

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind     0       0

bindマウントオプションは、OPに欠けていたものです。私はそれが最も重要な修正であると信じています(他のすべての実際の答えにもあります)。
imz-イヴァンザカリヤシェフ

9

2015/09/30現在、セキュリティパッチに起因する変更により、設定ファイル内のlxc.mount.entryを使用した絶対パスへのマウントが解除されます。

代わりに、相対パスを使用できます

 lxc.mount.entry = /mnt/ssd/solr_data data none bind 0 0

参照:https : //wiki.debian.org/LXC#Bind_mounts_inside_the_container


さらに、回答として機能します。それは支持されるため、人々はすぐにそれを見ることができます。追加していただきありがとうございます!
デビッドパークス

6

LXCは時間の経過とともに変化するため、これは非常に単純な場合がありますが、少し困惑したため、貢献したいと考えました。私は自分自身を思い出すことができるようにこれの要点も作成しましたが、lxc configデバイスを使用するだけでうまくいきます。

sudo lxc config device add Solr4StandAlone sdb disk source=/var/lib/lxc/Solr4StandAlone/rootfs/data path=mnt/ssd/solr_data

@biscuitNinjaによる変更のため、パスの引数の前にスラッシュを付けないことが重要です。

コンテナからホストへのディレクトリのマウント


1

コンテナのlibvirt作成に使用している場合lxc、ホスト上のディレクトリを次のように作成できますpassthrough

root@localhost:/# cat /etc/libvirt/lxc/my_container.xml
...
 <filesystem type='mount' accessmode='passthrough'>
    <source dir='<dir on host>'/>
    <target dir='<dir on container>'/>
 </filesystem>
....
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.