LXC: Bagaimana cara me-mount folder dari host ke wadah?

24

Saya mencoba me-mount folder pada host ke wadah LXC.

Tuan rumah memiliki folder yang /mnt/ssd/solr_datadibuat (ini saat ini ada di sistem file root, tapi nanti saya akan memasang drive SSD di sana, jadi saya bersiap untuk itu).

Saya ingin folder itu dipasang seperti /datapada wadah.

Jadi dalam file kontainer fstab saya memiliki yang berikut:

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

Tapi itu tidak boleh, saya mendapatkan kesalahan ini memulai wadah:

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'
David Parks
sumber

Jawaban:

16

Untuk membuat direktori secara otomatis dalam wadah, Anda juga dapat menambahkan create=diropsi di fstab:

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

Sunting: ini khusus untuk LXC. Lihat utas ini

Sama seperti kita sudah memiliki "opsional", ini menambahkan dua flag mount khusus LXC:

  • create = dir (akan melakukan mkdir_p di jalan)

  • create = file (akan melakukan mkdir_p pada dirname + a fopen di path)

Ini dimotivasi oleh beberapa ikatan yang dibutuhkan untuk wadah yang tidak terjangkau.

Bung kecil
sumber
1
Untuk versi mountapa ini berlaku? Saya tidak dapat menemukan opsi yang dijelaskan dalam mount(8)Ubuntu 14.04, misalnya.
0xC0000022L
Juga bukan yang terbarumount(8)
0xC0000022L
2
memang ... sepertinya hanya berfungsi dengan lxc. Lihat utas ini di lxc-devel ML
little-dude
14

Dalam /var/lib/lxc/Solr4StandAlone/configmenambahkan bacaan garis:

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

Kemudian lxc-stophentikan wadah lxc-startAnda dan wadah Anda lagi.

Hanya itu yang dibutuhkan.

ref: tautan referensi

Mausy5043
sumber
2
Solusi Anda harus mendapat ulasan yang lebih baik karena berfungsi dengan alat kontainer LXC yang tidak terjangkau. Yang lain tidak akan berfungsi dalam kasus ini. Dan mungkin selinux / apport perlu diubah untuk memungkinkan metode mereka. +1 untuk solusi Anda!
Huygens
11

Saya harus membuat /datafolder di wadah lokal sebelum mount akan berfungsi dengan baik.

Saya juga menggunakan entri fstab ini:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind     0       0
David Parks
sumber
bindopsi mount adalah sesuatu yang hilang dalam OP. Saya percaya ini adalah koreksi paling penting (ada juga di semua jawaban kerja lainnya).
imz - Ivan Zakharyaschev
9

Pada 2015/09/30 perubahan yang dihasilkan dari patch keamanan memecah pemasangan ke jalur absolut dengan lxc.mount.entry dalam file konfigurasi.

Sebagai gantinya Anda dapat menggunakan jalur relatif

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

Lihat: https://wiki.debian.org/LXC#Bind_mounts_inside_the_container

biscuitNinja
sumber
Tambahan yang bagus, ini berfungsi sebagai jawaban, itu akan diangkat sehingga orang segera melihatnya. Terima kasih telah menambahkannya!
David Parks
6

Karena LXC telah berubah dari waktu ke waktu, ini bisa sangat sederhana, tetapi agak membingungkan saya, jadi saya ingin berkontribusi. Saya juga membuat intisari untuk ini sehingga saya bisa mengingat sendiri, tetapi hanya menggunakan perangkat konfigurasi lxc akan melakukan trik.

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

Catatan Penting untuk meninggalkan garis miring argumen jalur karena perubahan yang disebutkan oleh @biscuitNinja

Memasang direktori dari wadah ke host

ekydfejj
sumber
1

Jika Anda menggunakan libvirtuntuk membuat lxcwadah Anda, Anda dapat membuat direktori pada host menjadi passthroughseperti yang ditunjukkan di sini:

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>
....
Swanand Pashankar
sumber