Как я могу совместно использовать папку между хост-системой (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
Нужно ли мне изменять разрешения для общей папки?
Согласно документации LXC, вы можете сделать это через привилегированный контейнер:
lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
Ниже приведено то, что я сделал, чтобы подключить один из моего каталога хоста к контейнеру. Это сложнее, чем кажется, потому что мы хотели бы достичь
Внутри контейнера мы должны быть в состоянии записать в каталог. Вне контейнера мы должны иметь возможность записывать файлы и каталоги, созданные внутри контейнера.После прочтения различных статей в Интернете (самая полезная из них - это проблема 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, все должно быть хорошо, но я думаю, что я что-то пропустил, и было бы здорово, если бы кто-то мог посоветовать, как разрешить это без взлома.
Вы также можете сделать это без 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