(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Docker】コンテナを一気に消すワンライナーとその解説

スポンサーリンク

停止しているコンテナをまとめて削除するワンライナー

docker rm -v $(docker ps -q -f status=exited)

以下、補足です。

補足

以下コマンドで停止済みのコンテナ含めて確認可能です。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
1a77e425c2ae        ubuntu              "/bin/bash"         6 days ago          Exited (1) 6 days ago                        condescending_poitras
49745c19a711        ubuntu              "/bin/bash"         6 days ago          Up 6 days                                    jovial_joliot
790db5d9f507        ubuntu              "/bin/bash"         10 days ago         Up 10 days                                   kind_feynman
2b5746559edb        ubuntu              "/bin/bash"         10 days ago         Exited (0) 10 days ago                       kind_clarke
06196a0265ca        ubuntu              "/bin/bash"         6 weeks ago         Up 6 weeks                                   sad_bardeen
b29bdfebd0e5        ubuntu              "/bin/bash"         6 weeks ago         Up 6 weeks                                   kind_poitras

上を見ると Exited...という文言がある2つのコンテナが停止しています。

ここで-f status=exitedを付与すると停止状態のコンテナだけが表示されます。

# docker ps -f status=exited
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
1a77e425c2ae        ubuntu              "/bin/bash"         6 days ago          Exited (1) 6 days ago                        condescending_poitras
2b5746559edb        ubuntu              "/bin/bash"         10 days ago         Exited (0) 10 days ago                       kind_clarke

最後に停止しているコンテナIDのみを出力させるために-qオプションを追加します。

# docker ps -q -f status=exited
1a77e425c2ae
2b5746559edb

これをdocker rmの引数にする以下ワンライナーで削除できます。

# docker rm -v $(docker ps -q -f status=exited)
1a77e425c2ae
2b5746559edb

確かに以下コマンドで確認するとコンテナは見当たりません。

# docker ps -f status=exited
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ちなみに削除時の-vは物理的なボリュームも削除する際に付与します。
以下、docker rmマニュアルから抜粋です。

-f, --force=true|false
Force the removal of a running container (uses SIGKILL). The default is false.
-l, --link=true|false
Remove the specified link and not the underlying container. The default is false.
-v, --volumes=true|false
Remove the volumes associated with the container. The default is false.

以上、定期的に利用するコマンドなので備忘録でした。