podman: mapeia o usuário do contêiner para o usuário host para permissões de volume compartilhado

podman: mapeia o usuário do contêiner para o usuário host para permissões de volume compartilhado

Estou tentando configurar giteausando 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 --newcontê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 uids e gids 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.7o openSUSE Leap 15.3.

Como posso executar este contêiner, enquanto mapeio todos os uids e gids 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 gids ) para um único uid/ gidpara 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.

informação relacionada