Ниже описано, что я сделал, чтобы смонтировать один из моих хост-каталогов в контейнер. Это сложнее, чем кажется, потому что мы хотели бы достичь
- Внутри контейнера мы должны иметь возможность писать в каталог.
- Вне контейнера мы должны иметь возможность записи в файлы и каталоги, созданные внутри контейнера.
После прочтения различных статей в Интернете (наиболее полезной является проблема github ), вот как я это решаю. Хитрость заключается в том, чтобы сопоставить uid и gid пользователя хоста с uid и gid пользователя внутри контейнера.
Предположим, я собираюсь смонтировать /home/breakds/projects
в том же месте в контейнере. Внешний каталог принадлежит пользователю breakds
, чей uid и gid 1000
.
Затем я создал пользователя в контейнере с именем debian
uid и gid, который 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
Это должно сделать свое дело.
ПРИМЕЧАНИЕ . Обратите внимание, что перед переключением на этот профиль убедитесь, что все директории или файлы, владельцем / группой которых является debian, должны быть удалены (и, вероятно, созданы заново после переключения). Это потому, что после отображения uid и gid их владение станет недействительным. Сначала я думал, что, поскольку я просто отображаю 1000 на 1000, все должно быть хорошо, но я думаю, что что-то здесь упустил, и было бы здорово, если бы кто-то мог посоветовать, как решить эту проблему без взлома.