Как разделить каталог между контейнером LXC и хостом?

Как я могу поделиться папкой между хост-системой (ubuntu 14.04) и контейнером ubuntu lxc?

Я попытался смонтировать папку на хосте:

sudo mount --bind /media/data/share /media/data/container/name/rootfs/share

, но я могу не вижу никаких файлов.

То же самое касается:

sudo ln -s /media/data/share /media/data/container/name/rootfs/share

Нужно ли менять разрешения для общей папки?

12
задан 4 March 2016 в 08:41

4 ответа

Я нашел статью в openSUSE Wiki: https://en.opensuse.org/User:Tsu2/LXC_mount_shared_directory

я выполнил шаги, и он работает теперь.

Создают каталог хоста:

mkdir /media/data/share && chmod 7777 /media/data/share

каталог Create в lxc контейнере:

mkdir /share

Редактирование lxc файл конфигурации на хосте:

nano /var/lib/lxc/containername/config
lxc.mount.entry = /media/data/share share none ro,bind 0.0
13
ответ дан 4 March 2016 в 08:41

Согласно документация LXC можно сделать это через привилегированный контейнер:

lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
11
ответ дан 4 March 2016 в 08:41

Ниже то, что я сделал для монтирования одного из моего каталога хоста к контейнеру. Это более хитро, чем это звучит, потому что мы хотели бы достигнуть

  • В контейнере мы должны смочь записать в каталог.
  • Вне контейнера мы должны смочь записать в файлы и каталоги, созданные в контейнере.

После чтения различных статей онлайн (самый полезный является этой проблемой GitHub), вот то, как я решаю это. Прием должен отобразить uid и ценуроз пользователя узла к uid и ценуроз пользователя в контейнере.

Предположим, что я собираюсь смонтироваться /home/breakds/projects к тому же самому местоположению в контейнере. Внешний каталог принадлежит пользователю breakds, чей uid и ценуроз 1000.

Я затем создал пользователя в названном контейнере debian, чей uid и ценуроз, оказалось, были 1000 также (потому что это является первым не пользователь root). Я затем создам (lxc) profie на хосте

lxc profile edit breakds

И ниже содержание профиля (я полагаю, что это находится в yaml формате):

name: breakds
config:
    raw.lxc: |
        lxc.id_map =
        lxc.id_map = u 0 165536 999
        lxc.id_map = g 0 165536 999
        lxc.id_map = u 1000 1000 1
        lxc.id_map = g 1000 1000 1
        lxc.id_map = u 1001 166537 64535
        lxc.id_map = g 1001 166537 64535
    user.vendor-data: |
        packages:
            - bash
description: allow home dir mounting for breakds
devices:
eth0:
    name: eth0
    nictype: bridged
    parent: lxdbr0
    type: nic
projects:
    path: /home/breakds/projects
    source: /home/debian/projects
    type: disk

Затем примените этот профиль к тому контейнеру постоянно:

$ lxc profile apply <my container> breakds

Это должно добиться цели.

Примечание: Обратите внимание на то, что прежде, чем переключиться на этот профиль, удостоверьтесь, что весь direcotries или файлы, владелец/группа которых является debian, должны быть удалены (и вероятно воссозданы после переключателя). Это вызвано тем, что после uid и отображения ценуроза, их владение станет недопустимым. Я первоначально думал, так как я просто отображаюсь от 1000 до 1 000, все должно быть прекрасным, но я думаю, что пропустил что-то здесь, и будет замечательно, если кто-то может совет относительно того, как разрешить это без взлома.

4
ответ дан 4 March 2016 в 08:41

Можно также сделать это без LXD путем редактирования файла конфигурации LXC непосредственно:

# Container specific configuration
lxc.idmap = u 0 165536 1000
lxc.idmap = g 0 165536 1000
lxc.idmap = u 1000 1000 1
lxc.idmap = g 1000 1000 1
lxc.idmap = u 1001 166536 64535
lxc.idmap = g 1001 166536 64535

Также необходимо удостовериться, что отчет пользователя контейнера сделан разрешение отобразиться на uid/gid 1000 на хосте путем редактирования/etc/subuid и/etc/subgid:

containeruser:165536:65536
containeruser:1000:1
1
ответ дан 23 November 2019 в 03:31

Другие вопросы по тегам:

Похожие вопросы: