Вопрос или проблема
У меня есть проблемы с предоставлением доступа к некоторым каталогам для конкретного контейнера, который доступен некоторым группам, управляемым извне (LDAP).
При использовании podman run
я могу использовать опцию --groups-add keep-groups
. Другой вариант, как объяснено здесь, — использовать --annotation run.oci.keep_original_groups=1
.
Дело в том, что я хочу использовать podman compose up
вместо этого из соображений удобства.
Поскольку некоторые группы являются внешними, я не могу смонтировать /etc/group
.
Я пробовал разные варианты, изменяя docker-compose.yml
с помощью group_adds
(что позволяет мне добавить определенные группы к пользователю, но они не распознаются хостом, и если я создаю эту группу в Dockerfile с тем же GID группы хоста, она ведет себя как новая группа), а также используя podman compose --pod-args="..."
, что возвращает либо неизвестный флаг --group-add
, либо --annotation
.
Ответ или решение
При работе с контейнерами Podman и необходимостью предоставления доступа к определённым директориям для групп, управляемых извне (например, через LDAP), может возникнуть ряд сложностей, особенно при попытке использовать podman compose
. В этом ответе мы рассмотрим основные аспекты, связанные с использованием групп в Podman, включая возможные решения и рекомендации для достижения вашей цели.
Проблемы с управлением доступом и группами
Ваша проблема заключается в том, что при использовании podman run
вы можете с лёгкостью добавлять группы с помощью опции --groups-add keep-groups
и аннотации --annotation run.oci.keep_original_groups=1
. Однако при попытке использовать podman compose up
вы сталкиваетесь с ограничениями, связанными с отсутствием аналогичных параметров.
Использование podman compose
К сожалению, команда podman compose
не поддерживает прямое добавление групп через параметры, как это делается в podman run
. Это значительно усложняет доступ к директориям, если ранее использовавшиеся методы не работают.
-
Файл
docker-compose.yml
: Как вы заметили, использованиеgroup_adds
в файле конфигурации не решает проблему, так как группы не распознаются, и создание группы в Dockerfile, даже с тем же GID, не позволяет её правильно идентифицировать. -
Использование аннотаций: Подобно тому, как это делается в
podman run
, добавление аннотаций для группы вpodman compose
может не поддерживаться, так как--pod-args
может вернуть ошибку о неизвестном флаге. На данный момент,podman compose
не имеет адекватных механизмов для передачи этих опций в контейнеры.
Возможные решения
1. Использование отдельного скрипта для запуска
Одним из рабочих решений может быть создание оболочки (wrapper script
), которая будет сначала настраивать нужные группы, а затем запускать контейнеры через Podman. Например:
#!/bin/bash
# Добавление групп
podman run --groups-add your_group --annotation run.oci.keep_original_groups=1 your_image
Таким образом, вы можете обойтись без podman compose
, но тем не менее обеспечить необходимые параметры.
2. Создание специального Dockerfile
Если это допустимо, вы можете создать Dockerfile, который настраивает окружение с необходимыми группами, хотя это не всегда возможно, особенно если группы управляются LDAP.
FROM your_base_image
RUN groupadd -g GID your_group_name
Однако, как вы уже заметили, это решение может не решить проблемы с доступом к внешним группам.
3. Настройка доступа к директориям
Также можно рассмотреть возможность переноса необходимых папок с конфиденциальной информацией на хост-машину с соответствующими правами доступа для пользователя контейнера, модифицировав права на уровень хоста, чтобы дать доступ этому пользователю.
Заключение
Работа с группами и доступом в Podman и podman compose
требует понимания ограничений, связанных с управлением идентификаторами пользователей и групп. К сожалению, текущие возможности podman compose
не позволяют настроить все функции, доступные при использовании podman run
. Несмотря на это, с учётом предложенных решений и обходных путей, вы сможете управлять доступом к нужным директориям, сохраняя при этом возможность удобно использовать podman compose
в своей работе.
Если возникнут дополнительные вопросы или необходимость тщательной настройки, не стесняйтесь обращаться за консультацией.