Я пытаюсь настроить gitea
с помощью podman. Я хотел бы иметь
- том данных, сопоставленный с каталогом хоста, поскольку это позволяет мне легко проверять и создавать резервные копии данных
- процесс контейнера, выполняемый определенным пользователем хоста
Podman запускается пользователем root, в основном из-за проблем, которые у меня были с podman generate systemd --new
контейнерами без root-доступа (см.Директива systemd User= не поддерживается. Почему?иподдержка User= в systemd для запуска служб без рута).
Чтобы добиться отображения с rootfull контейнерами, начал отображать все используемые контейнеры uid
s и gid
s на хосте 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.
Как запустить этот контейнер, при этом сопоставив все используемые uid
s и gid
s с определенным пользователем/группой хоста?
решение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 → гитеа
Благодаря этому изменению контейнер успешно запускается, а разрешения на хосте соответствуют ожидаемым.