LINUX.ORG.RU

Работа с файлами контейнера LXC извне

 


0

1

Хостовая машина - debian11, lxc контейнер - gentoo. Соответственно хостовая машина имеет графическое окружение, а контейнер - только доступ к консоли посредством: lxc exec gentoo bash[/incline].

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

Смысл использования контейнеров LXC состоит в данном случае в том, чтобы (1) разрабатывать код в gentoo и (2) чтобы контейнеры можно было бы легко переносить между машинами (посредством lxc export/import), на которых установлены Debian и потомки.

Редактировать же этот код хотелось бы снаружи контейнера из IDE, которая установлена на хостовой машине.

Способ установки был таким:

# snap install lxd
# lxd init (здесь была выбрана файловая система zfs, остальное выставлено по умолчанию)
# lxc launch gentoo/openrc/amd64 gentoo

Проблема в том, что не получается редактировать файлы контейнера извне (из внешней хостовой системы), потому что:

  • даже если создать пользователя с тем же uid, он не имеет прав доступа;
  • этот пользователь в любом случае не может попасть в директорию с файлами контейнера:
    # во внешней машине (debian):
    # id test1
    uid=1001000(test1) gid=1001000(test1) groups=1001000(test1)
    
    # директория, в которую нужно попасть имеет эти права, если смотреть из внешней машины (debian). Но юзер с этими правами не может туда попасть
    
    # su -l test1
    $ cd: /var/snap/lxd/common/mntns/var/snap/lxd/common/lxd/storage-pools/default/containers/gentoo/rootfs/mytest: Permission denied
    
  • туда может попасть только рут, у обычного пользователя внешней машины нет прав даже зайти в директорию.

    Таким образом, пока что код внутри контейнера можно редактировать в произвольном консольном редакторе, зайдя в контейнер. Либо от рута внешней машины. А от обычного пользователя внешней машины - нельзя.

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

Это же очень распространенная потребность, неужели она не была предусмотрена? Я понимаю, что в первую очередь в контейнеры кладутся сетевые сервисы, к которым потом доступ осуществляется по сети.

Возьмём удовлетворяющий всем пример FreeBSD jails. Датасет ZFS с jail может быть смонтирован в произвольную директорию. Там может быть создан такой же юзер, что и на внешней хостовой машине. Всё, из внешней машины можно редактировать файлы пользователя jail. Оба эти пользователя в могут их редактировать. Cистема в jail может несколько отличаться версиями, настройками и прочим. Вот то же самое хотелось бы получить в LXC.



Последнее исправление: nasecom (всего исправлений: 6)

Редактировать же этот код хотелось бы снаружи контейнера

Общая шара

Как-то так, отредактировать конфиг:

lxc config edit container_name
devices:                                                                                                                                             
  shared_dir:                                                                                                                                
    path: /path/to/container/shared_dir/                                                                                                               
    source: /path/to/host/shared_dir/                                                                                                             
    type: disk

Или просто из консоли

lxc config device add container_name share_name disk source=/path/to/host/shared_dir/ path=/path/to/container/shared_dir

Может быть придётся разобраться с правами.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 3)
Ответ на: комментарий от vvn_black

Спасибо, всё получилось ) Не считая того, что в базовой системе к id и группе пользователя добавляется три нуля.

nasecom
() автор топика
Последнее исправление: nasecom (всего исправлений: 1)