Назад | Перейти на главную страницу

Смонтировать набор данных ZFS в непривилегированный контейнер

Сначала немного информации о моей конфигурации:

Теперь мне нужен один из контейнеров для доступа к файлам / папкам в pool/mydataset. Я пробовал следующее:

Когда я запускаю контейнер, набор данных монтируется, но ls -la /mnt/mydataset в контейнере показывает nobody:nogroup вместо того user1:user1, что означает, что все файлы доступны только для чтения.

Есть идеи, как получить правильные разрешения в смонтированном каталоге?

Я испытал то же самое. Причина в моем случае в том, что файловая система, которую нужно смонтировать, принадлежит UID: GID в радиусе действия хост-машины.

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

Обратите внимание, что все, что ниже контейнера init принадлежит числовому UID 1000000, если смотреть с хост-машины. Внутри контейнера, PID1 - это корневой UID, как и ожидалось.

Что это значит? Если на хост-машине у вас есть файловая система, принадлежащая обычному пользователю (возможно, root, может быть, обычному пользователю), а затем привязать ее к контейнеру, UID (которые хранятся как целые числа) не имеет смысла в контейнере.

Кроме того, поскольку UID, которые видит контейнер, даже не принадлежат его пространству имен пользователя, даже корень внутри контейнера не может chown эти файлы.

Решение: На главной машине chown файлы так, чтобы они принадлежали корню внутри контейнера. В моем случае, как показано выше, мне пришлось:

  • Mount tank/mydataset в /tank/mydataset в хост-машине
  • chown 1000000:1000000 /tank/mydataset
  • (В файле конфигурации контейнера) lxc.mount.entry = /tank/mydataset path/in/container/ none bind 0 0