Как совместно использовать каталог между контейнером 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

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

1
задан 3 March 2016 в 23:41

3 ответа

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

lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
9
ответ дан 23 May 2018 в 21:18
  • 1
    Обратите внимание, что это LXD-документация, а не LXC. Если вы не установили LXD, команда lxc не будет работать. – Sam Bull 15 July 2017 в 20:50
  • 2
    @SamBull хорошо, это само по себе команда LXC / LXD. LXC можно использовать для ссылки на liblxc (базовую библиотеку) или на клиент LXD (с именем lxd), который используется в этом ответе, или на LXC (набор программного обеспечения и «старый» с помощью инструментов lxc-* или в проект (где LXC является коротким для контейнеров LinuX). Именно по этой причине я задал этот вопрос в метаданных Unix.SE. – 0xC0000022L 14 May 2018 в 12:03

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

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

После прочтения различных статей в Интернете (самая полезная из них - это проблема github), вот как я это решаю. Хитрость заключается в том, чтобы сопоставить uid и gid пользователя-хозяина с uid и gid пользователя внутри контейнера.

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

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

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
[d9 ] Затем примените этот профиль к этому контейнеру навсегда:

$ lxc profile apply <my container> breakds

Это должно сделать трюк.

ПРИМЕЧАНИЕ. Обратите внимание, что перед переключением на этот профиль убедитесь, что все директивные круги или файлы, владелец / группа которых debian должны быть удалены (и, вероятно, воссозданы после переключения). Это связано с тем, что после отображения uid и gid их право собственности станет недействительным. Я изначально думал, что, поскольку я просто сопоставляю 1000-1000, все должно быть хорошо, но я думаю, что я что-то пропустил, и было бы здорово, если бы кто-то мог посоветовать, как разрешить это без взлома.

3
ответ дан 23 May 2018 в 21:18

Вы также можете сделать это без 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 on хост путем редактирования / etc / subuid и / etc / subgid:

containeruser:165536:65536
containeruser:1000:1
0
ответ дан 23 May 2018 в 21:18

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

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