docker network pruneコマンドの使い方(実例付)CE対応

Docker公式ロゴ3a
©2023 Docker Inc. All rights reserved

 本記事はDocker ver24.0.7の環境で確認しています。

 このコマンドは、未使用のDockerネットワークを一括削除する際に使用します。

 Dockerネットワークが未使用の状態とは、コンテナが全く接続されていない状態です。

 接続されていたコンテナをdocker network disconnectコマンドで切り離すことで接続されなくなりますが、docker stopコマンドでコンテナを停止することでも接続されなくなります。

※このコマンドを使用するためにはDocker Engineのバージョンが1.13以上である必要があります。

 dockerネットワークに関しましては、別記事「Dockerネットワークの概要とその作り方の解説」をご参照ください。

docker network pruneコマンドのフォーマットとオプション

フォーマット

docker network prune <オプション>

※このコマンドを使用するためにはDocker Engineのバージョンが1.13以上である必要があります。

主なオプション一覧

オプション概説
--force, -f削除する前に確認のプロンプトを出力しない

コマンド例

$ docker network prune

docker network pruneコマンドの主な使い方

 以下で実例をまじえたコマンドの使い方を解説していきたいと思います。

実例では、Ubuntuの公式イメージにより起動したコンテナ(testvm)を使用します。

コンテナは「docker run -dit --init --name testvm ubuntu」で起動します。

※「--rm」オプションを付けておりませんので、ご利用後はコンテナ削除をお忘れなく。

基本事項の解説

 docker network pruneコマンドは、コンテナが1つも接続されていないDockerネットワークを一括削除することができます。

 冒頭でふれましたが、コンテナが停止していますとDockerネットワークから切り離された状態になりますので、対象のDockerネットワークはdocker network pruneコマンドでの一括削除対象になります。

コンテナが接続されていないネットワークを一括削除する

docker network pruneコマンドによるDockerネットワークの削除は、コンテナにアサインされていないネットワークだけでなく、アサインされているコンテナが停止状態の場合も対象になります。

ご使用には十分ご注意ください。

 Dockerネットワークの一括削除の実験を行うため、以下の図の環境を作成します。

Dockerネットワークの構成図

 作成後、以下の操作を行います。

  • ネットワークtestnet1からコンテナtestvm1をdocker network disconnectコマンドで切断
  • ネットワークtestnet2に接続されているコンテナtestvm2をdocker stopコマンドで停止

 ネットワークtestnet3に接続されているコンテナtestvm3に対してはなにも行いません。

 この状態でdocker network pruneコマンドを実行してみたいと思います。

 では、実験用の環境を作成します。まずは3つのネットワークを作成します。

$ docker network create -d bridge testnet1
$ docker network create -d bridge testnet2
$ docker network create -d bridge testnet3

 次に、それぞれのネットワークに接続したコンテナを作成します。

$ docker run -dit --init --name testvm1 --net testnet1 ubuntu
$ docker run -dit --init --name testvm2 --net testnet2 ubuntu
$ docker run -dit --init --name testvm3 --net testnet3 ubuntu

 これで最初に示しました図の環境ができました。

 ネットワークとコンテナの一覧を出力して確認しておきます。

 ネットワークの一覧です。

$ docker network ls
 NETWORK ID    NAME      DRIVER  SCOPE
 3abe6d83703c  bridge    bridge  local
 8a9d400abb35  host      host    local
 9b510d65ac45  none      null    local
 6101319f2c96  testnet1  bridge  local
 7939fcbf2783  testnet2  bridge  local
 ee5fee3fb2b2  testnet3  bridge  local

 コンテナの一覧です。

$ docker ps
 CONTAINER ID  IMAGE   COMMAND CREATED       STATUS       PORTS  NAMES
 d70211255cba  centos  "init"  4 minutes ago Up 4 minutes        testvm3
 b6c667febd24  centos  "init"  5 minutes ago Up 5 minutes        testvm2
 8406de143b97  centos  "init"  5 minutes ago Up 5 minutes        testvm1

 では、この状態で試しにdocker network pruneコマンドを実行してみます。

$ docker network prune

 以下の確認メッセージが出力されますので「y」を入力してEnterキーを押します。

WARNING! This will remove all networks not used by at least one container.
 Are you sure you want to continue? [y/N] y

削除条件を満たすネットワークが全て削除されますので、十分ご注意ください

 ネットワークの一覧を確認してみましょう。

$ docker network ls
 NETWORK ID    NAME      DRIVER  SCOPE
 3abe6d83703c  bridge    bridge  local
 8a9d400abb35  host      host    local
 9b510d65ac45  none      null    local
 6101319f2c96  testnet1  bridge  local
 7939fcbf2783  testnet2  bridge  local
 ee5fee3fb2b2  testnet3  bridge  local

 変化なしですね。

 作成したネットワークtestnet1、testnet2、testnet3は、コンテナが接続されているので削除されません。

 では以下の操作を行います。

(1)ネットワークtestnet1からコンテナtestvm1をdocker network disconnectコマンドで切断

$ docker network disconnect testnet1 testvm1

(2)ネットワークtestnet2に接続されているコンテナtestvm2をdocker stopコマンドで停止

$ docker stop testvm2

 この操作によって、testnet1とtestnet2に接続されたコンテナは無くなっていますので、docker network pruneコマンドを実行するとtestnet1とtestnet2は削除されるはずです。

 試してみます。

$ docker network prune

削除条件を満たすネットワークが全て削除されますので、十分ご注意ください

 以下のように出力されました。プロンプトには「y」を入力しています。

WARNING! This will remove all networks not used by at least one container.
 Are you sure you want to continue? [y/N] y
 Deleted Networks:
 testnet1
 testnet2

 削除されたネットワークとしてtestnet1とtestnet2が出力されていますね。

 念のためネットワークの一覧を出力してみます。

$ docker network ls
 NETWORK ID    NAME      DRIVER  SCOPE
 3abe6d83703c  bridge    bridge  local
 8a9d400abb35  host      host    local
 9b510d65ac45  none      null    local
 ee5fee3fb2b2  testnet3  bridge  local

 予想通りtestnet1とtestnet2が削除されてます。

 このように、コンテナの接続されていないネットワークは一括して削除することが可能です。

 コンテナが停止していますとネットワークから切断された状態になりますのでdocker network pruneの削除対象になる、という点については運用によっては注意が必要な場合があるかもしれません。

おわりに

 以上でdocker network pruneコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」をご参照ください。

 ご訪問ありがとうございました。

コメント