podman: сопоставить пользователя контейнера с пользователем хоста для разрешений общего тома

podman: сопоставить пользователя контейнера с пользователем хоста для разрешений общего тома

Я пытаюсь настроить giteaс помощью podman. Я хотел бы иметь

  • том данных, сопоставленный с каталогом хоста, поскольку это позволяет мне легко проверять и создавать резервные копии данных
  • процесс контейнера, выполняемый определенным пользователем хоста

Podman запускается пользователем root, в основном из-за проблем, которые у меня были с podman generate systemd --newконтейнерами без root-доступа (см.Директива systemd User= не поддерживается. Почему?иподдержка User= в systemd для запуска служб без рута).

Чтобы добиться отображения с rootfull контейнерами, начал отображать все используемые контейнеры uids и gids на хосте gitea user. В итоге получилось что-то вроде

podman run --rm \
    --uidmap=0:$(id -u gitea):1 \
    --gidmap=0:$(id -g gitea):1 \
    --uidmap=1000:$(id -u gitea):1 \
    --gidmap=1000:$(id -g gitea):1 \
    --gidmap=42:$(id -g gitea):1 \
    --volume /srv/gitea/data:/var/lib/gitea \
    docker.io/gitea/gitea:1.18.0-rc1-rootless

Вывод, который я получаю, это

WARN[0000] Path "/etc/SUSEConnect" from "/etc/containers/mounts.conf" doesn't exist, skipping 
WARN[0000] Path "/etc/zypp/credentials.d/SCCcredentials" from "/etc/containers/mounts.conf" doesn't exist, skipping 
Error: OCI runtime error: runc create failed: unable to start container process: can't get final child's PID from pipe: EOF

Я успешно запустил другие контейнеры Podman, несмотря на предупреждения о пути, поэтому думаю, их можно игнорировать.

Я работаю podman version 3.4.7на openSUSE Leap 15.3.

Как запустить этот контейнер, при этом сопоставив все используемые uids и gids с определенным пользователем/группой хоста?

решение1

Основная причина, похоже, была в попытке сопоставить несколько контейнеров uid( и gid) с одним uid/ gidхостом. Поэтому я пытался сопоставить ( контейнер с хостом ):

  • UID 0 → гитеа
  • GID 0 → гитеа
  • UID 1000 → gitea
  • GID 1000 → гитеа
  • GID 42 → гитеа

Вместо этого я знаю, что можно вернуться к другому сопоставлению, где только пара 1000 UID/GID, которая фактически запускает приложение Gitea, сопоставляется с пользователем хоста, а другие получают другой диапазон UID, используя

    --uidmap=0:10000:999 \
    --gidmap=0:10000:999 \
    --uidmap=1000:$(id -u gitea):1 \
    --gidmap=1000:$(id -g gitea):1 \

Это означает, что у нас есть следующие отображения

  • UID 0-999 → 10000-10999
  • GID 0-999 → 10000-10999
  • UID 1000 → gitea
  • GID 1000 → гитеа

Благодаря этому изменению контейнер успешно запускается, а разрешения на хосте соответствуют ожидаемым.

Связанный контент