podman:將容器使用者對應到主機使用者以獲得共享磁碟區權限

podman:將容器使用者對應到主機使用者以獲得共享磁碟區權限

我正在嘗試使用 podman 進行設定gitea。我想擁有

  • 資料卷映射到主機目錄,因為它允許我輕鬆檢查和備份數據
  • 由特定主機使用者執行的容器程序

Podman 由 root 使用者執行,主要是因為我在使用無根容器時遇到的問題podman generate systemd --new(請參閱systemd User= 指令不支持,為什麼?systemd 中支援 User= 來執行無根服務)。

為了實現 rootfull 容器的映射,開始將所有正在使用的容器映射uidgid主機的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 → 吉泰亞

透過此更改,容器成功啟動並且主機上的權限符合預期。

相關內容