我正在嘗試使用 podman 進行設定gitea
。我想擁有
- 資料卷映射到主機目錄,因為它允許我輕鬆檢查和備份數據
- 由特定主機使用者執行的容器程序
Podman 由 root 使用者執行,主要是因為我在使用無根容器時遇到的問題podman generate systemd --new
(請參閱systemd User= 指令不支持,為什麼?和systemd 中支援 User= 來執行無根服務)。
為了實現 rootfull 容器的映射,開始將所有正在使用的容器映射uid
到gid
主機的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 → 吉泰亞
透過此更改,容器成功啟動並且主機上的權限符合預期。