私はpodmanを使ってセットアップしようとしていますgitea
。
- データボリュームをホストディレクトリにマップすると、データの検査やバックアップが簡単に行えるため
- 特定のホストユーザーによって実行されたコンテナプロセス
podman generate systemd --new
Podmanはrootユーザーによって実行されますが、これは主にrootlessコンテナで発生した問題が原因です(systemd User= ディレクティブはサポートされていません。なぜでしょうか?そしてルートレスサービスを実行するために systemd で User= をサポートする)。
ルートフルコンテナでのマッピングを実現するために、使用中のコンテナ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
および をgid
特定のホスト ユーザー/グループにマッピングしながら、このコンテナーを実行するにはどうすればよいですか?
答え1
uid
根本的な原因は、複数のコンテナ(およびgid
) を単一のuid
/からgid
ホストにマッピングしようとしたことにあるようです。そこで、(コンテナからホストに) をマッピングしようとしました。
- UID 0 → gitea
- GID 0 → ギティア
- UID 1000 → gitea
- 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 → gitea
- GID 1000 → ギテア
この変更により、コンテナは正常に起動し、ホスト上の権限は期待どおりになります。