podman: 공유 볼륨 권한을 위해 컨테이너 사용자를 호스트 사용자로 매핑

podman: 공유 볼륨 권한을 위해 컨테이너 사용자를 호스트 사용자로 매핑

Podman을 사용하여 설정하려고합니다 gitea. 나는 갖고 싶다

  • 데이터 볼륨을 호스트 디렉터리에 매핑하면 데이터를 쉽게 검사하고 백업할 수 있기 때문입니다.
  • 특정 호스트 사용자가 실행하는 컨테이너 프로세스

podman generate systemd --newPodman은 루트 사용자에 의해 실행되는데, 주로 루트 없는 컨테이너와 관련된 문제로 인해 발생합니다 ( 참조).systemd User= 지시문이 지원되지 않습니다. 이유는 무엇입니까?그리고루트 없는 서비스 실행을 위해 systemd에서 User= 지원).

루트풀 컨테이너로 매핑을 달성하기 위해 사용 중인 모든 컨테이너를 uid호스트 gidgitea 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.7openSUSE Leap 15.3을 실행 중입니다.

사용 중인 모든 항목 uidgid특정 호스트 사용자/그룹에 매핑하면서 이 컨테이너를 어떻게 실행할 수 있나요?

답변1

uid근본 원인은 여러 컨테이너 (및 gids)를 단일 uid/ gid호스트에 매핑하려고 시도한 것 같습니다 . 그래서 (컨테이너를 호스트로) 매핑하려고 했습니다.

  • UID 0 → 지테아
  • GID 0 → 지테아
  • UID 1000 → 기테아
  • GID 1000 → 기테아
  • GID 42 → 기테아

대신 실제로 Gitea 앱을 실행하는 1000 UID/GID 쌍만 호스트 사용자에게 매핑되고 다른 사용자는 다음을 사용하여 다른 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 → 기테아
  • GID 1000 → 기테아

이 변경으로 인해 컨테이너가 성공적으로 시작되고 호스트에 대한 권한이 예상대로 됩니다.

관련 정보