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. Дивіться цю тему

Так само, як у нас вже було "необов'язково", до цього додаються два нових прапорця монтажу, характерних для LXC:

  • create = dir (зробить mkdir_p на шляху)

  • create = файл (зробить mkdir_p на dirname + fopen на шляху)

Це мотивувалося деякими необхідними кріпленнями для непривілейованих контейнерів.


1
До якої версії mountце стосується? mount(8)Наприклад, я не зміг знайти варіант, описаний в Ubuntu 14.04.
0xC0000022L


2
дійсно ... схоже, це працює лише з lxc. Дивіться цю тему на lxc-devel ML
маленький чувак

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варіант кріплення - те, чого не вистачало в ОП. Я вважаю, що це найважливіша корекція (присутня також у всіх інших робочих відповідях).
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-конфігураційного пристрою зробить свою справу.

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>
....
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.