Estou tentando configurar gitea
usando o podman. eu gostaria de ter
- o volume de dados mapeado para um diretório host, porque me permite inspecionar e fazer backup facilmente dos dados
- o processo de contêiner executado por um usuário host específico
O Podman é executado pelo usuário root, principalmente por causa dos problemas que tive com podman generate systemd --new
contêineres sem root (vejaA diretiva systemd User= não é suportada, por quê?esuporte User = no systemd para executar serviços sem root).
Para obter o mapeamento com contêineres rootfull, comecei a mapear todos os contêineres em uso uid
s e gid
s para o host gitea user
. Acabei com algo como
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
A saída que recebo é
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
Executei com sucesso outros contêineres podman, apesar dos avisos de caminho, então acho que eles podem ser ignorados.
Estou executando podman version 3.4.7
o openSUSE Leap 15.3.
Como posso executar este contêiner, enquanto mapeio todos os uid
s e gid
s em uso para um usuário/grupo de host específico?
Responder1
A causa raiz parece ter sido tentar mapear vários contêineres uid
( e gid
s ) para um único uid
/ gid
para o host. Então eu estava tentando mapear (container to host):
- UID 0 → gitea
- GID 0 → gitea
- UID 1000 → gitea
- GID 1000 → gitea
- GID 42 → gitea
Em vez disso, estou voltando para um mapeamento diferente, onde apenas o par 1000 UID/GID, aquele que realmente executa o aplicativo Gitea, é mapeado para o usuário host, e outros recebem um intervalo UID diferente usando
--uidmap=0:10000:999 \
--gidmap=0:10000:999 \
--uidmap=1000:$(id -u gitea):1 \
--gidmap=1000:$(id -g gitea):1 \
Isso significa que temos os seguintes mapeamentos
- UIDs 0-999 → 10000-10999
- GIDs 0-999 → 10000-10999
- UID 1000 → gitea
- GID 1000 → gitea
Com essa alteração, o contêiner é inicializado com êxito e as permissões no host são as esperadas.