Добавление каталога общего хоста в контейнер LXC / LXD

Я экспериментировал с LXC / LXD на Ubuntu 14.04, и все это отлично работает. Мне просто нужно выяснить, как получить общие каталоги, работающие между моей машиной и контейнером, чтобы я мог разделить Virtualbox раз и навсегда.

Я видел эту страницу: https: //wiki.gentoo. org / wiki / LXD

Что дает инструкции, но я просто продолжаю получать ошибки.

Кто-нибудь знает какие-либо простые, четкие инструкции, чтобы заставить это работать? Любая помощь очень ценится.

1
задан 28 October 2015 в 16:39

3 ответа

Инструкции по https://wiki.gentoo.org/wiki/LXD, которые вы упоминаете, являются правильными, но могут потребоваться немного больше объяснений.

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

sudo ls -l /var/lib/lxd/containers

и проверьте владельца контейнера, с которым вы хотите разделить каталог. В моем случае uid и gid оба были 100000.

Затем используйте их, чтобы изменить право собственности на каталог, который вы хотите предоставить:

sudo chown 100000:100000 /tmp/share_on_host

Поделитесь каталог с контейнером так, как вы указали в своем комментарии:

lxc config device add mycontainer sharedtmp disk \
                  path=/tmp/share_on_guest source=/tmp/share_on_host

Теперь в контейнере вы увидите, что каталог /tmp/share_on_guest (я бы не советовал монтировать ваш каталог как [ f7], потому что это используется системой для других вещей и имеет специальные разрешения) принадлежит root. Здесь вы можете использовать chown в контейнере, чтобы изменить право собственности на соответствующие uid и gid для вашего пользователя в контейнере.

В качестве побочного примечания, после изменения владельца в контейнере, например, пользователь с uid 33 вы увидите на хосте, что uid теперь 100033, что делает полный смысл.

16
ответ дан 23 May 2018 в 16:17

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

$ lxc config ## display help
...
lxc config device add [<remote>:]<container> <device> <type> [key=value...]
    Add a device to a container.
...

Обратите внимание, что <device> - это просто произвольное имя, которое вы назначаете, которое будет использоваться как идентификатор для последующего управления устройством.

Например, для монтирования главной папки «./host» в качестве «/ mnt / host» в контейнере ...

lxc config device add mycontainer vartest disk source=$(pwd)/host path=/mnt/host

Остается одна проблема: если вы хотите, чтобы эта папка была доступна для записи как хостом, так и контейнером, необходимо соответствующим образом настроить права собственности и разрешения. Это усложняется режимом по умолчанию LXD, который виртуализирует числовые диапазоны для значений пользователя и группы id. Однако есть простое решение: обходите эту виртуализацию, настроив контейнер на запуск с эквивалентами хоста ...

lxc config set <container> security.privileged true

devices

Обратите внимание, что этот подход, вероятно, лучше всего работает, если вы обычно работаете в контейнере как пользователь без полномочий root, например, если вы прикрепляетесь с помощью ...

lxc exec zesty -- su --login ubuntu
Дополнительные замечания по конфигурации: https: // help.ubuntu.com/lts/serverguide/lxd.html
3
ответ дан 23 May 2018 в 16:17
  • 1
    Существует проблема с регистрацией без полномочий root: env отличается, в частности http_proxy. Пример обходного пути: sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update. – nobar 23 September 2017 в 09:25
  • 2
    Что касается http_proxy, я думаю, что более легкое решение, вероятно, для включения IPV4, как обсуждалось здесь . – nobar 24 September 2017 в 00:39
  • 3
    ... за которым следует sudo dhclient в контейнере - или изменить manual на dhcp в 50-cloud-init.cfg. Хорошие подсказки здесь: github.com/lxc/lxd/issues/1298 – nobar 24 September 2017 в 01:56
  • 4
    Это явно bad идея. Рекомендуя переключиться на привилегированные контейнеры, подбрасывает один из самых продвинутых LXD. Хотя LXC 1.x также предлагал использовать непривилегированные контейнеры (и да, даже с правами root), было немного сложнее разобраться в деталях. С LXD это ушло в прошлое. Кроме того, что сложного в настройке списков ACL в какой-либо папке, чтобы разрешить UID хоста требуемый доступ или использовать метод, описанный здесь ? Да, отображение UID / GID - это не единственный способ! – 0xC0000022L 14 May 2018 в 12:15

Ниже приведен обновленный ответ на этот вопрос.

Установите контейнер хоста «/ var / www» как «/ var / test» в контейнере.

lxc config device добавить mycontainer vartest disk source = / var / www path = / var / test

1
ответ дан 23 May 2018 в 16:17

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

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