Я экспериментировал с LXC / LXD на Ubuntu 14.04, и все это прекрасно работает. Мне просто нужно выяснить, как заставить работать общие каталоги между моей хост-машиной и контейнером, чтобы я мог раз и навсегда отказаться от Virtualbox.
Я видел эту страницу: https://wiki.gentoo.org/wiki/LXD
Который предоставляет инструкции, но я просто продолжаю получать ошибки.
Кто-нибудь знает какие-либо простые, четкие инструкции, чтобы заставить это работать? Любая помощь высоко ценится.
lxc config device add confexample sharedtmp disk path=/tmp source=/tmp/shared
. Но, глядя на каталог контейнера, владелец и группа для файлов в нем установлены на «nobody» и «nogroup», и монтирование доступно только для чтения.lxc file
для передачи файлов между хостом и контейнером, используяpush
иpull
.Ответы:
Инструкции на https://wiki.gentoo.org/wiki/LXD, которые вы упомянули, верны, но, возможно, потребуется немного больше пояснений.
На хосте вы сначала проверяете принадлежность каталога, в котором хранятся данные контейнера. Бегать
и проверьте владельца контейнера, с которым вы хотите поделиться каталогом. В моем случае и то
uid
иgid
другое было 100000.Затем используйте их, чтобы изменить владельца каталога, которым вы хотите поделиться:
Разделите каталог с контейнером так, как вы указали в своем комментарии:
Теперь в контейнере вы увидите, что каталог
/tmp/share_on_guest
(я бы не советовал монтировать ваш каталог, так/tmp
как он используется системой для других вещей и имеет специальные разрешения) принадлежит root. С этогоchown
момента вы можете использовать в контейнере, чтобы изменить владельца для соответствующегоuid
иgid
для вашего пользователя в контейнере.В качестве дополнительного примечания, после изменения владельца в контейнере, например, на пользователя с
uid
33, вы увидите на хосте, чтоuid
теперь есть 100033, что имеет смысл.источник
/var/lib/lxd/containers
указанном/var/lib/lxd/storage-pools/lxd/containers
(в этом случае последнийlxd
бит - это имя моего пула хранения ZFS). Казалось, что все контейнеры имеют одинаковый идентификатор 165536 uid / gid при работе и принадлежатroot:root
при выключении.lxc config
и это работает как шарм!Вот обновленный ответ на этот вопрос.
Смонтируйте папку хоста
/var/www
как/var/test
в контейнере.источник
Контейнеру можно назначить дополнительные устройства , которые могут быть папками, доступными для хоста.
Обратите внимание, что
<device>
это просто произвольное имя, которое вы назначаете, которое будет использоваться в качестве идентификатора для последующего управления устройством.Например, чтобы смонтировать папку хоста "./host" как "/ mnt / host" в контейнере ...
Остается одна проблема - если вы хотите, чтобы эта папка была доступна для записи как хостом, так и контейнером, необходимо соответствующим образом настроить владельца и разрешения. Это усложняется режимом LXD по умолчанию, который виртуализирует числовые диапазоны для
id
значений пользователя и группы . Однако существует простое решение : обойти эту виртуализацию, настроив контейнер для работы с привилегиями, эквивалентными хосту ...В настоящее время мне неясны все последствия этого подхода для безопасности хоста, но, похоже, виртуализация несколько сдерживает их. Практический риск зависит от того, как и почему вы будете использовать контейнер. См. Технические примечания по адресу https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers.
Также обратите внимание, что этот подход, вероятно, работает лучше всего, если вы обычно работаете в контейнере как пользователь без полномочий root, например, если вы присоединяетесь с помощью ...
источник
env
в частности, она отличаетсяhttp_proxy
. Пример обхода:sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update
.http_proxy
, я думаю, что более простое решение, вероятно, состоит в том, чтобы включить IPV4, как обсуждалось здесь .sudo dhclient
в контейнере - или изменения ,manual
чтобыdhcp
в50-cloud-init.cfg
. Хорошие подсказки здесь: github.com/lxc/lxd/issues/1298Основываясь на превосходном ответе ph0t0nix , я предлагаю следующий пошаговый подход для моего сервера Ubuntu 18.04:
В хосте определить UID владельца rootfs:
В контейнере определите UID ubuntu (то есть пользователя в контейнере):
Создайте общую папку на хосте и добавьте ее в контейнер:
Настройте в UID хоста общей папки (UID = UID хоста + UID гостя):
Гость (пользователь ubuntu) теперь имеет доступ к общей папке и может настроить доступ к общей папке с помощью контейнера
chmod
.источник
Теперь у меня есть рабочее, безопасное решение этой проблемы, использующее профили LXD для обработки сопоставления между UID и GID в контейнере и на хосте.
Очень полезный смысл может быть найден здесь:
https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8
источник
0777
aka «пожалуйста, взломайте мою систему и уничтожьте мои данные» без видимой причины! Нет почти никаких причин для этого, потому что этого можно избежать с помощью более разумных изменений, таких как изменение (групповое) владение. -1