注意
本記事のコマンドは Ubuntu 24.04 LTS(Noble Numbat)で検証しています。Ubuntu 22.04 では Podman のバージョンが 3.4.4 と異なります。バージョンによって動作が変わる場合がありますのでご注意ください。
「Podman は rootless って聞いたけど、何が違うの?」「root なしでコンテナを動かして、本当に安全なの?」——コンテナに興味が出てきたとき、こんな疑問を持つ方は多いと思います。
結論から言うと、Podman はインストールした瞬間から一般ユーザーとしてコンテナを動かせます。Docker のように root 権限や追加設定は不要で、Ubuntu 24.04 なら apt install podman の一行で完結します。
本記事では Ubuntu 24.04 LTS の Docker 公式イメージで実際にコマンドを実行し、Podman Rootless の仕組み・前提条件・動作確認の手順を解説します。subuid/subgid の意味から UID マッピングの確認、systemd ユーザーサービスの設定まで、順を追って説明します。
この記事のポイント
- Ubuntu 24.04 では
apt install podmanで Podman 4.9.3 が入り、追加設定なしで rootless 動作する(2026-06-14 実測) /etc/subuidにubuntu:100000:65536が自動設定済み——これが rootless の鍵- コンテナ内は root に見えるが、ホスト OS 上では UID 100000 として動く(実測で確認)
- Docker rootless は追加スクリプトが必要、Podman は最初から rootless がデフォルト
systemctl --user enable podman.socketでユーザーレベルの API ソケットを有効化できる
目次
- Rootless コンテナとは何か
- 前提条件:subuid / subgid とユーザーネームスペース
- Ubuntu 24.04 に Podman をインストールする
- Rootless でコンテナを起動してみる
- UID マッピングを確認する
- systemd ユーザーサービスとして管理する
- Docker Rootless との比較
- よくあるエラーと解決策
- まとめ
Rootless コンテナとは何か
通常の Docker 環境では、コンテナを動かすために dockerd というデーモンが root として常時起動しています。これはセキュリティ上のリスクです——コンテナの脆弱性が悪用された場合、攻撃者がホスト OS に対して root 権限を持つ可能性があります。
Rootless コンテナとは、root 権限を持たない一般ユーザーとしてコンテナエンジン自体を動かす仕組みです。Podman の場合、デーモンプロセスがそもそも存在しないため、一般ユーザーが直接コンテナを起動できます。
コンテナ内では「root(UID 0)に見える」状態で動きますが、ホスト OS から見ると一般ユーザーの UID で動作します。これが Rootless の核心です。
前提条件:subuid / subgid とユーザーネームスペース
Rootless コンテナが機能するためには、2 つの前提条件が必要です。
①サブ UID / サブ GID の設定
/etc/subuid と /etc/subgid には、一般ユーザーが使用できる UID / GID の範囲が定義されています。Ubuntu 24.04 では useradd でユーザーを作成すると自動的に割り当てられます。

ubuntu:100000:65536
$ cat /etc/subgid
ubuntu:100000:65536
ubuntu:100000:65536 は「ubuntu ユーザーが UID 100000 から始まる 65536 個のサブ UID を使える」という意味です。コンテナ内の root(UID 0)はホスト OS では UID 100000 にマッピングされます。
VPS の場合は要確認
Ubuntu Server を最小インストールした場合、/etc/subuid が空のことがあります。その場合は sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 USERNAME で手動追加してください。
②ユーザーネームスペースの有効化
カーネルが UID/GID のネームスペース(名前空間)隔離に対応している必要があります。Ubuntu 24.04 では標準で有効になっています。
47415
# 0 以外なら有効です
実測では 47415 が返ってきました。0 が表示された場合は、echo 65536 | sudo tee /proc/sys/user/max_user_namespaces で有効化できます。
Ubuntu 24.04 に Podman をインストールする
Ubuntu 24.04 のパッケージリポジトリには Podman 4.9.3 が含まれています(2026-06-14 実測)。インストールは 1 コマンドで完了します。
Reading package lists… Done
Building dependency tree… Done
102 newly installed, 0 to remove and 0 not upgraded.
Need to get 66.6 MB of archives.
Setting up fuse-overlayfs (1.13-1) …
Setting up slirp4netns (1.2.3-1) …
Setting up podman (4.9.3+ds1-1ubuntu0.2) …
$ podman –version
podman version 4.9.3

インストール時に注目したいのが自動インストールされる依存パッケージです。Rootless 動作に必要なものが一式揃います。
| パッケージ | 役割 |
|---|---|
fuse-overlayfs |
Rootless 環境でのオーバーレイファイルシステム |
slirp4netns / passt |
ユーザー空間ネットワーク(root なしで NAT) |
uidmap |
newuidmap / newgidmap(UID マッピングツール) |
netavark / aardvark-dns |
コンテナネットワーク管理・DNS 解決 |
crun |
軽量 OCI コンテナランタイム(Rootless に最適化) |
Ubuntu 22.04 との比較

Ubuntu 22.04 で apt-cache policy podman を実行すると、インストール候補は 3.4.4+ds1-1ubuntu1.22.04.3 です。Ubuntu 24.04 の 4.9.3 と比べると 1 世代以上古く、ネットワーク周りの挙動が大きく異なります。VPS でコンテナを使う場合は Ubuntu 24.04 を選ぶのがおすすめです。
Rootless でコンテナを起動してみる
インストールが完了したら、一般ユーザーとして(sudo なしで)コンテナを起動できます。

$ podman run –rm hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
$ podman run –rm alpine echo “I am rootless!”
I am rootless!
正直、「え、これだけ?」と拍子抜けするくらい簡単です。Docker と全く同じコマンド構文で動き、かつ root を使っていません。これが Podman の最大のメリットです。
ストレージパスを確認する
Rootless モードでは、イメージとコンテナのデータは ホームディレクトリ以下に保存されます。root が管理する /var/lib/containers とは別のパスです。
$ podman pull docker.io/library/alpine
alpine: Pulling from library/alpine
$ ls ~/.local/share/containers/storage/
defaultNetworkBackend libpod mounts overlay overlay-containers
# ホームディレクトリ以下に保存されている
UID マッピングを確認する
Rootless の仕組みの核心は「UID マッピング」です。コンテナ内では root(UID 0)として動いているように見えますが、ホスト OS から見ると別の UID になっています。

$ podman run –rm alpine id
uid=0(root) gid=0(root) groups=0(root)
# コンテナの UID マッピングを確認する
$ podman run –rm alpine cat /proc/self/uid_map
0 100000 65536
# → コンテナ内 0(root)= ホスト上 100000 にマッピング
# つまりホスト OS にとっては一般ユーザー権限と同じ
0 100000 65536 という数値の意味:「コンテナ内 UID 0 から始まる 65536 個は、ホスト上では UID 100000 から始まる範囲にマッピングする」です。これが /etc/subuid で設定した範囲と一致しています。
ホスト OS 上で ps aux を実行してコンテナプロセスを見ると、ubuntu ユーザー(UID 1000)またはサブ UID 範囲の UID で動いていることが確認できます。
newuidmap / newgidmap の役割
-rwsr-xr-x 1 root root 70256 May 30 2024 /usr/bin/newgidmap
-rwsr-xr-x 1 root root 70256 May 30 2024 /usr/bin/newuidmap
-rws の s が SUID ビットを示しています。これにより、一般ユーザーが実行しても root として動作し、UID マッピングの設定(/proc/PID/uid_map への書き込み)ができます。root 権限なしで UID 名前空間を扱うための特別な仕組みです。
systemd ユーザーサービスとして管理する
Podman の Rootless ソケット(API エンドポイント)を常時起動しておきたい場合、systemd のユーザーサービスとして管理できます。
$ systemctl –user enable –now podman.socket
Created symlink ~/.config/systemd/user/sockets.target.wants/podman.socket
$ systemctl –user status podman.socket
● podman.socket – Podman API Socket
Loaded: loaded (/usr/lib/systemd/user/podman.socket; enabled)
Active: active (listening)
Listen: /run/user/1000/podman/podman.sock (Stream)
# ユーザーごとに独立したソケットパス /run/user/<UID>/podman/podman.sock
ソケットパスの %t は systemd の変数で、/run/user/<UID> に展開されます。実測で取得したソケットの設定内容は次の通りです:
[Unit]
Description=Podman API Socket
Documentation=man:podman-system-service(1)
[Socket]
ListenStream=%t/podman/podman.sock
SocketMode=0660
[Install]
WantedBy=sockets.target
Docker Desktop 代替として podman-docker パッケージを入れると、docker コマンドが podman にエイリアスされ、既存のツール(docker-compose など)がそのまま使えるようになります。
$ sudo apt install -y podman-docker
Note: This may take a while.
$ docker –version
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
podman version 4.9.3
ログインセッション終了後も動かし続ける
SSH ログアウト後もコンテナを動かし続けるには、「ログイン不要のライブタイム」を有効にする必要があります。
# ubuntu ユーザーのセッションを SSH ログアウト後も維持する
$ loginctl show-user ubuntu | grep Linger
Linger=yes
Docker Rootless との比較

Docker にも rootless モード がありますが、設定が複雑です。dockerd-rootless-extras パッケージを追加インストールし、dockerd-rootless-setuptool.sh install を実行する必要があります。
一方 Podman は追加設定なしで rootless がデフォルトです。実際に Ubuntu 24.04 で確認したところ、Docker には dockerd-rootless.sh が含まれておらず、別途 docker-rootless-extras パッケージが必要でした。
| 比較項目 | Docker rootless | Podman(デフォルト) |
|---|---|---|
| 設定の手間 | 追加スクリプト実行が必要 | 追加設定なし(デフォルト) |
| デーモン | dockerd(ユーザーレベル) | なし(daemonless) |
| コマンド互換性 | docker run |
podman run(同一構文) |
| cgroup サポート | v2 推奨(v1 制限あり) | v2 対応(Ubuntu 24.04 はデフォルト v2) |
| systemd 統合 | 限定的 | podman generate systemd コマンドあり |
「既存の Docker ワークフローをそのまま使いたい」という場合は podman-docker で docker コマンドをエイリアスする方法が最も手軽です。
よくあるエラーと解決策
エラー①:ERRO[0000] cannot clone: Operation not permitted
Error: cannot re-exec process
原因:ユーザーネームスペースが無効になっています。カーネルの max_user_namespaces が 0 になっているか、セキュリティ設定で制限されています。
解決策:
0
$ echo 65536 | sudo tee /proc/sys/user/max_user_namespaces
65536
# 永続化するには /etc/sysctl.conf に追記する
$ echo “user.max_user_namespaces=65536” | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
エラー②:Error: missing range
原因:/etc/subuid または /etc/subgid にエントリがありません。
解決策:
$ sudo usermod –add-subgids 100000-165535 $(whoami)
$ cat /etc/subuid
ubuntu:100000:65536
# podman system migrate で設定を反映させる
$ podman system migrate
エラー③:network connection to “0.0.0.0:8080” refused(コンテナがホストからアクセスできない)
Rootless のネットワーク制限
Rootless モードではコンテナへのポートバインドに制限があります。-p 80:80 のように 1024 未満のポートを使う場合は --sysctl net.ipv4.ip_unprivileged_port_start=80 オプションが必要です。VPS でウェブサーバーを公開するときは 8080 などの高位ポートを使い、nginx をリバースプロキシとして前段に置く構成が一般的です。
まとめ
Podman Rootless は apt install podman の一行だけで使えるようになり、追加設定は不要です。Ubuntu 24.04 では 4.9.3 が標準提供され(実測)、インストールと同時に rootless 動作に必要な fuse-overlayfs・slirp4netns・uidmap が揃います。
/etc/subuidのubuntu:100000:65536が rootless の鍵——コンテナ内 root = ホスト UID 100000cat /proc/self/uid_mapでコンテナ内から UID マッピングを確認できる(実測値: 0 100000 65536)systemctl --user enable podman.socketで API ソケットをユーザーレベルで常時起動できる- Docker rootless より設定が圧倒的に簡単。Docker コマンドとの互換性も高い
- 1024 未満のポートバインドには追加オプションが必要なのが唯一の制限点
Podman Rootless は VPS で複数のサービスを運用する際に特に効果的です。各サービスを別のユーザーで動かすことで、1 つのコンテナが侵害されてもホスト全体へのダメージを最小化できます。セキュリティを気にしながら自宅サーバーや VPS でコンテナを使いたい方に、ぜひ試してみてほしいツールです。
VPS 上で Podman や Docker を実際に運用してみたい方は、東京リージョンが使える Vultr が最もシンプルで始めやすいです。月額 $5 からの 1GB プランで今回の手順がそのまま試せます。
VPS 各社の料金・性能を比較した記事もあわせてご覧ください:


コメント