LXC: Jak zamontować folder z hosta do kontenera?


24

Próbuję zamontować folder na hoście na kontenerze LXC.

Na hoście /mnt/ssd/solr_datautworzono folder (obecnie znajduje się on w głównym systemie plików, ale później zainstaluję tam dysk SSD, więc przygotowuję się do tego).

Chcę zamontować ten folder jak /dataw kontenerze.

Tak więc w pliku fstab kontenerów mam:

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

Ale to nie jest niemożliwe, pojawia się błąd podczas uruchamiania kontenera:

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'

Odpowiedzi:


16

Aby automatycznie utworzyć katalog w kontenerze, możesz również dodać create=diropcję na fstab:

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

Edycja: dotyczy tylko LXC. Zobacz ten wątek

Tak jak mieliśmy już „opcjonalne”, dodaje to dwie nowe flagi montowania specyficzne dla LXC:

  • create = dir (zrobi mkdir_p na ścieżce)

  • create = plik (zrobi mkdir_p na nazwie katalogu + fopen na ścieżce)

Było to motywowane niektórymi potrzebnymi mocowaniami bindowania dla nieuprzywilejowanych kontenerów.


1
Do jakiej wersji mountto dotyczy? Nie mogłem na przykład znaleźć opcji opisanej w mount(8)Ubuntu 14.04.
0xC0000022L

Również nie w najnowszymmount(8)
0xC0000022L

2
rzeczywiście ... wygląda na to, że działa tylko z lxc. Zobacz ten wątek na lxc-devel ML
little-dude

14

W /var/lib/lxc/Solr4StandAlone/configdodawać odczyt wiersza:

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

Następnie lxc-stopzatrzymaj pojemnik i lxc-startpojemnik ponownie.

To wszystko, czego potrzeba.

ref: link referencyjny


2
Twoje rozwiązanie powinno zostać lepiej ocenione, ponieważ działa z nieuprzywilejowanym narzędziem do kontenerów LXC. Inne nie będą działać w tym przypadku. I prawdopodobnie selinux / apport będzie musiał zostać zmodyfikowany, aby umożliwić ich metodę. +1 za twoje rozwiązanie!
Huygens

11

Musiałem utworzyć /datafolder w lokalnym kontenerze, aby mount działał poprawnie.

Użyłem również tego wpisu fstab:

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

bindopcja montowania to coś, czego brakowało w OP. Uważam, że jest to najważniejsza korekta (obecna także we wszystkich innych odpowiedziach roboczych).
imz - Ivan Zachharyaschev

9

Według stanu na dzień 2015/09/30 zmiana wynikająca z poprawki zabezpieczeń przerywa montowanie do ścieżki bezwzględnej z plikiem lxc.mount.entry w pliku konfiguracyjnym.

Zamiast tego możesz użyć ścieżki względnej

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

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


Świetny dodatek, działa jako odpowiedź, zostanie pozytywnie oceniony, aby ludzie wkrótce go zobaczyli. Dzięki za dodanie!
David Parks,

6

Ponieważ LXC zmieniało się z czasem, może to być bardzo proste, ale trochę mnie zaskoczyło, więc chciałem wnieść swój wkład. Stworzyłem też dla tego istotę, więc mogę zapamiętać siebie, ale wystarczy użyć urządzenia konfiguracyjnego LXC.

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

Uwaga Ważne jest pozostawienie przedniego ukośnika poza argumentem ścieżki ze względu na zmianę wspomnianą przez @biscuitNinja

Montowanie katalogów z kontenera na hosta


1

Jeśli używasz libvirtdo utworzenia lxckontenera, możesz ustawić katalog na hoście tak, passthroughjak pokazano tutaj:

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>
....
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.