Я хочу получить доступ к каталогам в хост-системе из контейнера podman без root.
При использовании внешних томов с контейнерами без рута podman у пользователя, который обращается к внешним томам, есть subuid и subgid пользователя, который вызвал podman. Какой идентификатор пользователя зависит от диапазона вспомогательных идентификаторов вызывающего пользователя и внутреннего пользователя в контейнере OCI. Я нашел единственный способ предоставить этому субпользователю доступ к внешним томам (помимо того, что сделать папку доступной для записи всем в хост-системе) - это открыть
каталог непосредственно для этого идентификатора субпользователя. Есть ли лучший способ сделать это, чтобы не проверять вручную / etc / subgid
, а также пользователя в контейнере?
Podman 3.1.0 (выпущен в марте 2021 г.) представил новый суффикс : U
для параметра командной строки - volume
.
Цитата из справочной страницы :
Суффикс: U указывает Podman использовать правильный UID и GID хоста на основе UID и GID в контейнере, чтобы рекурсивно изменить владельца и группу исходный объем.
Альтернативное решение
Вместо смены владельца вы можете сопоставить UID контейнера с UID хоста, который в настоящее время владеет файлами в томе. Параметры командной строки для этого: - uidmap
и - gidmap
:
Параметр - uidmap
позволяет пользователю отображать UID контейнеров для UID хоста.
UID контейнера не отображаются напрямую на UID хоста. Вместо этого отображение происходит в два этапа:
UID контейнера -> промежуточный UID -> UID хоста
Первый этап отображения можно настроить с помощью - uidmap . amount указывает количество последовательных UID, которые будут отображены.
Если, например, amount равно 4, первый шаг сопоставления будет выглядеть так:
UID контейнера | промежуточный UID |
---|---|
container_uid | intermediate_uid |
container_uid + 1 | intermediate_uid + 1 |
container_uid + 2 | intermediate_uid + 2 |
container_uid + 3 | intermediate_uid + 3 |
Второй шаг отображения выводится podman из содержимого файла / etc / subuid и UID пользователя, запускающего podman.
Второй этап отображения:
промежуточный UID | UID хоста |
---|---|
0 | UID для пользователя, запускающего podman |
1 | 1-й SUBUID из / etc / subuid |
2 | 2-й СУБЮИД из / etc / subuid |
3 | 3-й СУБЮИД из / etc / subuid |
n-ый | n-ый СУБЮИД из / etc / subuid |
(SUBUID, используемые из / etc / subuid , взяты из диапазонов, принадлежащих пользователю, запустившему podman)