Сначала немного информации о моей конфигурации:
pool/mydataset
принадлежит user1
Теперь мне нужен один из контейнеров для доступа к файлам / папкам в pool/mydataset
. Я пробовал следующее:
user1
внутри контейнераОтредактировано pool/lxc/mycontainer/config
и добавил:
lxc.mount.entry = /pool/mydataset mnt/mydataset none rw,bind 0 0
Когда я запускаю контейнер, набор данных монтируется, но ls -la /mnt/mydataset
в контейнере показывает nobody:nogroup
вместо того user1:user1
, что означает, что все файлы доступны только для чтения.
Есть идеи, как получить правильные разрешения в смонтированном каталоге?
Я испытал то же самое. Причина в моем случае в том, что файловая система, которую нужно смонтировать, принадлежит UID: GID в радиусе действия хост-машины.
Непривилегированный контейнер, по определению, использует UID за пределами нормального диапазона и пространство имен пользователя, чтобы создать видимость нормальности в контейнере.
Обратите внимание, что все, что ниже контейнера init
принадлежит числовому UID 1000000, если смотреть с хост-машины. Внутри контейнера, PID1 - это корневой UID, как и ожидалось.
Что это значит? Если на хост-машине у вас есть файловая система, принадлежащая обычному пользователю (возможно, root, может быть, обычному пользователю), а затем привязать ее к контейнеру, UID (которые хранятся как целые числа) не имеет смысла в контейнере.
Кроме того, поскольку UID, которые видит контейнер, даже не принадлежат его пространству имен пользователя, даже корень внутри контейнера не может chown
эти файлы.
Решение: На главной машине chown
файлы так, чтобы они принадлежали корню внутри контейнера. В моем случае, как показано выше, мне пришлось:
tank/mydataset
в /tank/mydataset
в хост-машинеchown 1000000:1000000 /tank/mydataset
lxc.mount.entry = /tank/mydataset path/in/container/ none bind 0 0