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