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 = file (создаст 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ваш контейнер снова.

Это все, что нужно.

ссылка: ссылка ссылка


2
Ваше решение должно быть лучше рассмотрено, так как оно работает с непривилегированным инструментом контейнеров LXC. Другие не будут работать в этом случае. И, вероятно, нужно будет настроить selinux / apport, чтобы разрешить их метод. +1 за ваше решение!
Гюйгенс

11

Мне пришлось создать /dataпапку в локальном контейнере, прежде чем монтирование будет работать правильно.

Я также использовал эту запись fstab:

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

bindопция mount - это то, чего не хватало в 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 добьется цели.

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.