---
title: "Podmanコマンド一覧と使い方｜run・ps・exec・cpの早見表【Podman 6.1対応】"
url: "https://www.issoh.co.jp/tech/details/2845/"
published: 2024-06-28
updated: 2026-10-13
categories: ["Kubernetes・コンテナ"]
publisher: "株式会社一創"
---

# Podmanコマンド一覧と使い方｜run・ps・exec・cpの早見表【Podman 6.1対応】

`podman cp`でコピーしたファイルの所有者がrootに変わった。`podman ps`を打っても作ったはずのコンテナが出てこない。Podmanはコマンド名こそDockerとほぼ同じですが、既定値や6.0で変わった挙動でつまずく箇所があります。この記事では、Fedora 45コンテナ内のPodman 6.1.3（rootful）で2026年10月13日に実行したコマンドと出力をもとに、イメージ・コンテナ・ファイルコピー・書き出し・ネットワークの主要コマンドを用途別にまとめました。目的のコマンドは下の早見表から探してください。

## まとめ：用途別Podmanコマンド早見表

Podmanの公式マニュアルは[podman(1)](https://docs.podman.io/en/latest/markdown/podman.1.html)で「`alias docker=podman`」と書くほどDocker互換のCLIで、ほとんどのコマンドは`docker`を`podman`に置き換えれば通ります。デーモンを持たない設計の違いは[Podmanとdockerの違いは？デーモンレス・rootlessの仕組みと移行判断](/tech/details/13202/)で解説しています。

| やりたいこと        | コマンド例                                                              |
| ------------- | ------------------------------------------------------------------ |
| イメージを取得       | `podman pull docker.io/library/alpine:3.22`                        |
| イメージ一覧        | `podman images`                                                    |
| コンテナを作って起動    | `podman run -d --name web docker.io/library/alpine:3.22 sleep 600` |
| 停止中のコンテナを起動   | `podman start web`                                                 |
| 実行中のコンテナ一覧    | `podman ps`                                                        |
| 停止中も含めた一覧     | `podman ps -a`                                                     |
| コンテナに入る       | `podman exec -it web sh`                                           |
| ホストからコンテナへコピー | `podman cp ./a.txt web:/root/`                                     |
| コンテナからホストへコピー | `podman cp web:/etc/os-release .`                                  |
| 停止・削除         | `podman stop web` / `podman rm web`                                |
| コンテナをイメージ化    | `podman commit web myimg:v1`                                       |
| イメージをファイルに保存  | `podman save -o img.tar myimg:v1`                                  |
| ネットワーク一覧      | `podman network ls`                                                |
| 環境の確認         | `podman version` / `podman info`                                   |

迷いやすい点は3つです。

- `podman cp`は`--archive`が既定でtrueのため、コンテナへコピーしたファイルの所有者はコンテナの主UID/GID（多くはroot）になります。元の所有者を残すなら`--archive=false`です。
- `podman ps`は実行中だけを表示し、rootと一般ユーザーではコンテナの保存先そのものが別です。
- Podman 6.0から`podman volume prune`は名前付きボリュームを消さなくなり、`podman commit`は既定でコンテナを一時停止します。

## Podmanのバージョンと6.0で変わったコマンド

### podman version・podman infoによる環境確認

Podmanは2026年10月時点で6.1系と5.8系の2本が並行して更新されています。[GitHubのリリース一覧](https://github.com/podman-container-tools/podman/releases)では、2026年10月12日にv6.1.4とv5.8.9が同日に公開されました。リポジトリは6.0でCNCF管理の組織へ移り、URLは`github.com/podman-container-tools/podman`になっています。手元の版はディストリビューションで決まり、Fedora 45は6.1.3、Fedora 44は5.8系です。

```
$ podman version
Client:        Podman Engine
Version:       6.1.3
API Version:   6.1.3

$ podman info --format '{{.Host.NetworkBackend}} {{.Host.CgroupsVersion}} {{.Store.GraphDriverName}} db={{.Host.DatabaseBackend}}'
netavark v2 overlay db=sqlite
```

`podman info`の`--format`で必要な項目だけ取り出せます。上の出力は、ネットワークがnetavark、cgroupsがv2、ストレージドライバがoverlay、内部DBがSQLiteという6系の標準構成です。各コマンドの詳しいオプションは`podman cp --help`か`man podman-cp`で引けます。

### Podman 6.0の破壊的変更のうちコマンドに効くもの

2026年6月24日公開のPodman 6.0.0は、[リリースノート](https://github.com/podman-container-tools/podman/blob/main/RELEASE%5FNOTES.md)のBreaking Changesに次の項目を挙げています。5系の手順書やスクリプトをそのまま流用すると結果が変わるものだけを抜き出しました。

| 対象                          | 5系まで       | 6.0以降                        |
| --------------------------- | ---------- | ---------------------------- |
| `podman volume prune`       | 未使用の全ボリューム | 匿名ボリュームのみ（全部は`--all`）        |
| `podman commit`             | 一時停止しない    | 既定で一時停止（`--pause=false`で旧挙動） |
| `podman volume ls`の複数filter | OR         | AND                          |
| CNIネットワーク                   | 選択可        | 削除（netavarkのみ）               |
| slirp4netns                 | 選択可        | 削除（pastaのみ）                  |
| cgroups v1・iptables         | 動作         | 非対応（v2・nftablesが必須）          |
| Intel Mac・Windows 10        | 対応         | 非対応                          |

Intel MacやWindows 10で`podman machine`を使っている場合は、5.8系に留まるか、別のランタイムへ移る判断が必要です。Mac向けの代替は[Colimaとは？MacでDocker Desktopを外す導入手順と設定の落とし穴【0.10系】](/tech/details/17842/)で比較しています。

## イメージの取得・一覧・削除（pull・images・rmi・prune）

イメージは`podman pull`で取得します。レジストリ名を省くと`registries.conf`の検索先から候補を選ぶ確認が出る環境があるため、スクリプトでは`docker.io/library/alpine:3.22`のように完全な名前で書くのが確実です。

```
podman pull docker.io/library/alpine:3.22
podman images --format '{{.Repository}}:{{.Tag}}'
podman rmi docker.io/library/alpine:3.22
podman image prune        # タグがなく、他のイメージやコンテナから参照されないイメージを削除
podman image prune -a     # コンテナが使っていないイメージをすべて削除
```

コンテナが参照しているイメージは`podman rmi`で消せません。6.1.3では次のエラーで止まりました。停止済みのコンテナも参照に数えるので、先に`podman rm`で対象コンテナを消します。`podman rmi -f`を使うと、そのイメージを使っているコンテナも一緒に削除されます（6.1.3でも実行後の`podman ps -a`は空になりました）。

```
Error: image used by 5721dede6c65...: image is in use by a container: consider listing external containers and force-removing image
```

## podman runのオプションとコンテナの起動（run・start）

### podman run でよく使うオプション

`podman run`はイメージから新しいコンテナを作って起動します。[podman-run(1)](https://docs.podman.io/en/latest/markdown/podman-run.1.html)のオプションは100を超えますが、日常的に使うのは次の範囲です。

| オプション                  | 意味                             |
| ---------------------- | ------------------------------ |
| `-d`                   | バックグラウンドで起動                    |
| `-it`                  | 標準入力を開き疑似TTYを割り当てる             |
| `--name web`           | コンテナ名を付ける                      |
| `--rm`                 | 終了時にコンテナと匿名ボリュームを削除            |
| `--replace`            | 同名コンテナがあれば置き換える                |
| `-p 8080:80`           | ホストの8080をコンテナの80へ転送            |
| `-v $PWD/data:/data:Z` | ホストのディレクトリをマウント（SELinuxラベル付与）  |
| `-e KEY=value`         | 環境変数を渡す                        |
| `--network mynet`      | 接続するネットワークを指定                  |
| `--userns=keep-id`     | rootless時にホストのUIDをコンテナ内でも同じにする |

SELinuxが有効なFedoraやRHELでは、`-v`にラベル指定が無いとコンテナからマウント先を読めないことがあります。`:Z`はそのコンテナ専用のラベルを付けるので、同じディレクトリを複数のコンテナで共有するときは`:z`（小文字）を使います。`--rm`付きで起動した`podman run --rm --name tmp1 docker.io/library/alpine:3.22 true`は、終了直後の`podman ps -a`に何も残りませんでした。

### podman run と podman start の違い

`podman run`は毎回新しいコンテナを作り、`podman start`は作成済みのコンテナを起動し直します。同じ`podman run`を`--name`付きで2回打つと、`the container name "web" is already in use`のエラー（終了コード125）になり、置き換えるには`--replace`を付けるよう案内されます。使い回すコンテナは`run`を1回だけにし、以降は`start`と`stop`で扱います。

```
$ podman run --name once docker.io/library/alpine:3.22 echo hi
hi
$ podman start -a once
hi
```

`podman start`は既定では出力を表示しないため、終了済みのコンテナを再実行して結果を見るときは`-a`（attach）を付けます。[podman-start(1)](https://docs.podman.io/en/latest/markdown/podman-start.1.html)のとおり、作成時の`--tty`や`--interactive`は`start`側で変えられません。TTYが要るなら作り直してください。Docker側の起動コマンドの使い分けは[Dockerコンテナ起動コマンドの使い分け｜run・start・execと起動しない時の対処](/tech/details/3935/)にまとめています。

## コンテナの確認（ps・inspect）

### podman ps でコンテナが表示されない原因

`podman ps`は実行中のコンテナだけを出します。終了した`once`は`-a`を付けて初めて見えます。

```
$ podman ps --format '{{.Names}} {{.Status}}'
web Up 1 second
$ podman ps -a --format '{{.Names}} {{.Status}}'
web Up 1 second
once Exited (0) Less than a second ago
```

`-a`でも出ないときは、実行ユーザーを確かめます。[podman(1)](https://docs.podman.io/en/latest/markdown/podman.1.html)の`--root`の説明によると、保存先の既定はUID 0なら`/var/lib/containers/storage`、それ以外のユーザーは`$HOME/.local/share/containers/storage`です。`sudo podman run`で作ったコンテナは、一般ユーザーの`podman ps -a`からは見えません。作ったときと同じユーザーで確認してください。

Buildahなど他のツールが同じストレージに作ったコンテナは、[podman-ps(1)](https://docs.podman.io/en/latest/markdown/podman-ps.1.html)の`--external`で表示されます。`podman rmi`が「external containers」を理由に失敗したときに確かめる場所です。Buildahの使い方は[Buildahとは？buildah buildの使い方とrootless・Kubernetes内ビルドの設定](/tech/details/15687/)で扱っています。

### podman inspectによる状態・設定の抽出

`podman inspect`はコンテナやイメージの設定をJSONで出します。全体は長いので、`--format`で欲しい値だけ抜くのが実用的です。

```
$ podman inspect web --format '{{.State.Status}}'
running
$ podman image inspect myimg:v1 --format '{{.Config.Cmd}} layers={{len .RootFS.Layers}}'
[sleep 600] layers=2
```

## podman execによるコンテナ内コマンドの実行

### podman exec -itによる対話シェルの起動

`podman exec -it web sh`で、実行中のコンテナにシェルで入れます。`-i`は標準入力を開いたままにし、`-t`は疑似TTYを割り当てます。Alpineなど`bash`を含まないイメージで`podman exec -it web bash`を打つと、`` executable file `bash` not found in $PATH ``で終了コード127が返ります。その場合は`sh`を使います。

### 作業ディレクトリ・ユーザー・環境変数と終了コード

`-w`で作業ディレクトリ、`-u`で実行ユーザー、`-e`で環境変数を渡せます。コンテナ内のコマンドの終了コードは、そのまま`podman exec`の終了コードになります。

```
$ podman exec -w /etc -u nobody -e FOO=bar web sh -c 'pwd; id -un; echo $FOO'
/etc
nobody
bar
$ podman exec web sh -c 'exit 7'; echo $?
7
```

CIのヘルスチェックで`podman exec web pg_isready`のように使えば、コンテナ内の判定結果をそのままジョブの成否にできます。

### podman execの実行条件と停止中のエラー

[podman-exec(1)](https://docs.podman.io/en/latest/markdown/podman-exec.1.html)は対象を「running container」に限っています。停止したコンテナに打つと、6.1.3では次のエラーと終了コード255で返りました。先に`podman start web`で起動してから実行します。

```
Error: can only create exec sessions on running containers: container state improper
```

停止中のコンテナからファイルを取り出したいだけなら、起動しなくても次の`podman cp`で取り出せます。

## podman cpによるファイルコピー

この章の実行例は、次の準備をした状態で打っています。

```
podman run -d --name web docker.io/library/alpine:3.22 sleep 600
podman run -d --name db docker.io/library/alpine:3.22 sleep 600
podman run --name once docker.io/library/alpine:3.22 echo hi   # 終了済みのコンテナ
printf 'hello\n' > /tmp/a.txt
mkdir -p /tmp/d/sub && printf '1\n' > /tmp/d/sub/f
```

### podman cpの書式・3つのコピー方向・停止中の利用

書式は`podman cp [オプション] [コンテナ:]コピー元 [コンテナ:]コピー先`で、`podman container cp`も同じコマンドです。[podman-cp(1)](https://docs.podman.io/en/latest/markdown/podman-cp.1.html)はホストからコンテナ、コンテナからホストに加えて、コンテナ同士のコピーにも対応し、コンテナは実行中でも停止中でもよいとしています。6.1.3でこの3方向のコピーと、停止中のコンテナへのコピーを確かめました。

```
# ホスト → コンテナ
podman cp /tmp/a.txt web:/root/
# コンテナ → ホスト
podman cp web:/etc/os-release /tmp/osr
# コンテナ → コンテナ（ホストを経由しない）
podman cp web:/root/a.txt db:/tmp/
# 停止中のコンテナにもコピーできる
podman cp /tmp/a.txt once:/tmp/
# - を指定するとtarストリームで標準出力へ
podman cp web:/root/a.txt - | tar -tvf -
```

コンテナ間のコピーは`podman cp web:/root/a.txt db:/tmp/`の1回で済み、`db`側で`cat /tmp/a.txt`するとhelloが返りました。一度ホストへ出して入れ直す2段階の手順は要りません。コンテナ内のパスはコンテナのルート（`/`）からの相対として解釈されます。

### 所有者の扱い：–archive は既定でtrue

podman-cp(1)は`--archive`（`-a`）を「trueのとき、コンテナへコピーしたファイルの所有者はコンテナの主UID/GIDに変わる。falseならコピー元のUID/GIDを保つ。既定はtrue」と説明しています。所有者を1234:1234にしたファイルで確かめた結果です。

```
$ chown 1234:1234 /tmp/a.txt
$ podman cp /tmp/a.txt web:/root/b.txt
$ podman exec web ls -ln /root/b.txt
-rw-r--r--    1 0        0                6 Oct 13 12:29 /root/b.txt
$ podman cp --archive=false /tmp/a.txt web:/root/c.txt
$ podman exec web ls -ln /root/c.txt
-rw-r--r--    1 1234     1234             6 Oct 13 12:29 /root/c.txt
```

この例ではコンテナの主UID/GIDが0:0のため、コピー後の所有者も0:0です。一般にはコンテナの主UID/GIDに変更され、アプリが読み書きできるかはアクセス権限も含めて確認します。アプリを非rootユーザーで動かすイメージに設定ファイルを入れたのに権限エラーになるときは、コンテナの主ユーザー（`podman inspect web --format '{{.Config.User}}'`、空ならroot）を確かめ、コピー後に`podman exec -u 0`で所有者変更に必要な権限を持つユーザーとして`chown`するか、所有者を合わせたファイルを`--archive=false`で入れます。

### ディレクトリをコピーするときの末尾の /.

コピー先が既存ディレクトリの場合、コピー元をそのまま指定するとディレクトリごと、末尾に`/.`を付けると中身だけがコピーされます。

```
$ podman cp /tmp/d web:/srv/
$ podman exec web find /srv
/srv
/srv/d
/srv/d/sub
/srv/d/sub/f
$ podman cp /tmp/d/. web:/opt/
$ podman exec web find /opt
/opt
/opt/sub
/opt/sub/f
```

### podman cp でできないことと代わりの手段

次の3つは6.1.3で終了コード125のエラーになりました。

| 操作                                  | エラー                                                        |
| ----------------------------------- | ---------------------------------------------------------- |
| `podman cp 'web:/root/*.log' /tmp/` | `could not be found on container web`                      |
| 存在しない親ディレクトリへのコピー                   | `could not be found on container web`                      |
| 既存ファイルのパスへディレクトリをコピー                | `destination must be a directory when copying a directory` |

ワイルドカードはシェルにもコンテナにも展開されず、文字どおりの`*.log`というファイルを探しに行きます。podman-cp(1)は代わりに、ホストからコンテナへの複数ファイルは`xargs`や`find`と組み合わせ、コンテナからホストへは`podman mount`で得たマウントポイントを普通の`cp`で扱う方法を挙げています。親ディレクトリが無いときは、先に`podman exec web mkdir -p /nonexist/dir`で作ります。

3つ目は、podman-cp(1)のコピー先の振る舞いの表でも「cannot copy a directory to a file」というエラー条件として載っています。`--overwrite`の説明は「ディレクトリと非ディレクトリを相互に上書きできるようにする」ですが、6.1.3では`--overwrite`を付けても同じエラーで止まりました。コピー先に同名のファイルがあるときは、`podman exec web rm /root/target`で消してからコピーするのが確実です。

## コンテナの停止・削除・イメージ化（stop・rm・commit）

`podman stop`は終了シグナルを送り、既定の10秒（`-t`で変更）待っても止まらなければ強制終了します。`podman stop -t 0 db`で止めたコンテナは`Exited (137)`、つまりSIGKILLで終わった状態として`podman ps -a`に残りました。`-t`を付けない既定の`podman stop`でも、PID 1の`sleep 600`は終了シグナルに反応せず、10秒後に同じ137で終わりました。シグナルを処理しないプロセスをPID 1にすると、停止のたびに10秒待つことになります。

実行中のコンテナは`podman rm`で消せず、`running or paused containers cannot be removed without force`で止まります。`podman rm -f web`で停止と削除を一度に行えます。全コンテナを片付けるなら`podman rm -f -a`です。

`podman commit web myimg:v1`はコンテナの現在の状態から新しいイメージを作ります。6.0から既定でコンテナを一時停止してから書き出すようになり、6.1.3の`--help`にも`Pause container during commit (default true)`と出ます。本番で動いているコンテナをcommitすると、その間リクエストが止まります。止めたくなければ`--pause=false`を付けますが、書き込み途中のファイルが不完全な状態で入るおそれがあります。継続的に使うイメージは、commitで作らずにContainerfileからビルドする方が再現できます。

## イメージとコンテナのファイル書き出し（save・load・export・import）

ファイルへの書き出しは2系統あり、取り違えると読み込めません。[podman-save(1)](https://docs.podman.io/en/latest/markdown/podman-save.1.html)は親レイヤーを含めてイメージを保存し`podman load`で戻します。[podman-export(1)](https://docs.podman.io/en/latest/markdown/podman-export.1.html)はコンテナのファイルシステムを1枚に平坦化したtarを書き出し`podman import`で戻します。同じコンテナから両方を作って読み込み直した結果です。

| 項目          | save → load             | export → import |
| ----------- | ----------------------- | --------------- |
| 対象          | イメージ                    | コンテナ            |
| tarのサイズ     | 8,606,720バイト            | 8,592,384バイト    |
| 読み込み後のCMD   | `[sleep 600]`           | `[]`（空）         |
| 読み込み後のレイヤー数 | 2                       | 1               |
| タグ          | `localhost/myimg:v1`が戻る | import時に付け直す    |

```
podman save -o /tmp/img.tar myimg:v1
podman load -i /tmp/img.tar
podman export -o /tmp/fs.tar web
podman import /tmp/fs.tar imported:v1
```

exportから作ったイメージはCMDが空なので、`podman run imported:v1`だけでは起動するコマンドがありません。オフライン環境へイメージを運ぶならsave、コンテナ内のファイル一式を調べたり別の場所で展開したりするならexportと使い分けます。

## ネットワークとボリュームの管理（network・volume）

### podman networkによるネットワークの作成・確認

初期状態のネットワークは`podman`という名前のbridge1つです。`podman network create`で作ったネットワークには、6.1.3では`10.89.0.0/24`が割り当てられました。[podman-network(1)](https://docs.podman.io/en/latest/markdown/podman-network.1.html)によると、作成したネットワークは`--disable-dns`を付けない限りDNSが有効で、参加したコンテナをコンテナ名で引けます。6.1.3でも`mynet`上の別コンテナから`ping app`が`10.89.0.2`に解決されました。

```
$ podman network ls --format '{{.Name}} {{.Driver}}'
podman bridge
$ podman network create mynet
$ podman network inspect mynet --format '{{.Driver}} {{range .Subnets}}{{.Subnet}}{{end}}'
bridge 10.89.0.0/24
$ podman run -d --name app --network mynet docker.io/library/alpine:3.22 sleep 600
$ podman run --rm --network mynet docker.io/library/alpine:3.22 ping -c1 app
PING app (10.89.0.2): 56 data bytes
```

使っていないネットワークは`podman network rm mynet`か`podman network prune`で消します。コンテナが接続しているネットワークは`"mynet" has associated containers with it`で削除を拒否されるため、先にそのコンテナを削除するか、`-f`でコンテナごと消します。

### podman volume pruneの6.0以降の既定対象

[podman-volume-prune(1)](https://docs.podman.io/en/latest/markdown/podman-volume-prune.1.html)は既定で匿名（名前の無い）未使用ボリュームだけを消すと明記しています。6.1.3で`podman volume create named1`のあと`podman volume prune -f`を実行しても、`named1`は残りました。名前付きも含めて消すなら`--all`、消える対象を先に見るなら`--dry-run`です。5系のつもりで定期清掃のスクリプトを書いていた場合、6系に上げると名前付きボリュームが溜まり続けます。

Podmanで実際のアプリを動かす例として、[DifyをPodmanのrootlessで動かす手順とNotion連携の設定](/tech/details/2791/)ではrootless特有の権限とSELinuxの設定を扱っています。本番のコンテナ基盤をクラウド上に組む段階では、[AWS・Google Cloud・Azureのインフラ構築支援](https://www.issoh.co.jp/service/system/aws/)で構成設計から相談できます。

## よくある質問

### podman ps でコンテナが表示されないのはなぜですか？

`podman ps`は実行中のコンテナだけを表示するので、停止中も見るには`podman ps -a`を使います。それでも出ない場合は実行ユーザーの違いを疑います。rootのコンテナは`/var/lib/containers/storage`、一般ユーザーのコンテナは`$HOME/.local/share/containers/storage`に保存され、互いに見えません。`sudo`で作ったコンテナは`sudo podman ps -a`で確認します。

### podman cp はコンテナが停止していても使えますか？

使えます。公式マニュアルはコンテナが実行中でも停止中でもよいとしており、Podman 6.1.3で停止済みのコンテナへのコピーも成功しました。`podman exec`は実行中のコンテナにしか使えないので、停止中のコンテナからファイルを取り出すときは`podman cp`を使います。

### podman cp でコンテナからコンテナへ直接コピーできますか？

できます。`podman cp web:/root/a.txt db:/tmp/`のように両方にコンテナ名を付けると、ホストを経由せずに1回でコピーされます。ワイルドカードは使えないため、複数ファイルはディレクトリ単位でコピーします。

### podman run と podman start の違いは何ですか？

`podman run`はイメージから新しいコンテナを作って起動し、`podman start`は作成済みのコンテナを起動し直します。`run`を繰り返すとコンテナが増えるか名前の重複でエラーになるので、使い回すコンテナは`--name`を付けて1回だけ`run`し、以降は`start`と`stop`で扱います。

### podman save と podman export はどちらを使うべきですか？

イメージを別の環境へ運ぶなら`podman save`と`podman load`です。`podman export`はコンテナのファイルシステムを1レイヤーに平坦化し、CMDなどの設定を持たないため、`podman import`したイメージはそのままでは起動コマンドがありません。

## 関連記事

- [Podmanとdockerの違いは？デーモンレス・rootlessの仕組みと移行判断](/tech/details/13202/)
- [Dockerコンテナ起動コマンドの使い分け｜run・start・execと起動しない時の対処](/tech/details/3935/)
- [Buildahとは？buildah buildの使い方とrootless・Kubernetes内ビルドの設定](/tech/details/15687/)
- [DifyをPodmanのrootlessで動かす手順とNotion連携の設定](/tech/details/2791/)
- [Dockerの仕組みを図解｜コンテナ隔離・アーキテクチャ・VMとの違いを実機コマンドで確認](/tech/details/2661/)

---

出典: [Podmanコマンド一覧と使い方｜run・ps・exec・cpの早見表【Podman 6.1対応】](<https://www.issoh.co.jp/tech/details/2845/>)（株式会社一創）
