docker network rmコマンドの使い方(実例付)

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

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

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

 コンテナが接続されているネットワークは削除できません。ネットワークの削除を行う場合は、接続されているコンテナを停止、または削除してから行う必要があります。

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

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

フォーマット

docker network rm [削除ネットワーク名 or ネットワークID] ...

主なオプション一覧

 なし

コマンド例

$ docker network rm testnet1

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

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

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

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

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

基本事項の解説

 docker network rmコマンドは、dockerネットワークを削除することができます。

 削除可能なdockerネットワークは、docker network createコマンドを使って手動で作成したりdocker-composeコマンドなどでコンテナを作成する時にオプション指定で作成されたものなどが対象となります。

 また冒頭でふれましたとおり、dockerネットワークを削除する場合は、削除対象のネットワークがコンテナに使われていない状態にする必要があります。

 dockerネットワークがコンテナに使われていない状態にするには、対象のコンテナを停止します。

指定したDockerネットワークを削除する

 現状のネットワークの一覧を出力してみます。

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

 この状態で、Dockerネットワークtestnet1とtestnet2を作成します。

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

 確認してみます。

$ docker network ls
NETWORK ID    NAME     DRIVER   SCOPE
3abe6d83703c  bridge   bridge   local
8a9d400abb35  host     host     local
9b510d65ac45  none     null     local
75347c72c897  testnet1 bridge   local
ee208368e1a2  testnet2 bridge   local

 では、以下のコマンドでtestnet1を削除してみましょう。

$ docker network rm testnet1

 確認です。

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

 testnet1は削除されました。

コンテナが接続されているネットワークは削除できないことを確認する

 前項のネットワークtestnet2にコンテナを接続してみます。

$ docker run -dit --init --name testvm1 --net testnet2 ubuntu

 これで、コンテナvmtest1は、testnet2に接続された状態で起動されました。

 この状態でネットワークtestnet2を削除してみましょう。

$ docker network rm testnet2

 以下のようなエラーが発生してしまいました。

Error response from daemon: error while removing network: network testnet2 (中略) has active endpoints

 ネットワークtestnet2がアクティブ(動作中)なので削除できない旨のエラーですね。

 docker network inspectコマンドでtestnet2の状態を確認してみます。

$ docker network inspect testnet2

 「Containers」の部分のみ見てみましょう。

(省略)
 "Containers": {
 "4ce1dd213fa9e14fc8e38946609404772a146f80df81230dd8eece60056dec6d": {
 "Name": "testvm1",
 "EndpointID": "6fcbdc34a4dbc453358de40b9ceca027ce80fb3233937a355ab7fbd654818243",
 "MacAddress": "02:42:ac:13:00:02",
 "IPv4Address": "172.23.0.2/16",
 "IPv6Address": ""
 }
 },
(省略)

 Containersの部分には、接続されているコンテナが出力されます。

 出力内容(Name部分)を見てみますと、コンテナtestvm1が接続されていることが確認できました。

 ではこのコンテナtestvm1を停止してみます。

$ docker stop testvm1

 再度docker network inspectコマンドでtestnet2の状態を確認してみます。

$ docker network inspect testnet2

 「Containers」の部分のみ表示します。

"Containers": {},

 先ほど表示されていたtestvm1が消えていますね。

 では、ネットワークtestnet2を削除します。

$ docker network rm testnet2

 今度はエラーは出ませんでした。

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

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

 ネットワークtestnet2は削除されていることが確認できました。

ネットワークIDを指定して削除する

 ネットワークの削除は、ネットワークIDを指定しても実行可能です。

 以下のようにネットワークtestnet10を作成しています。

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

 この状態で、ネットワークIDを指定してtestnet10を削除してみます。

 指定するネットワークIDは、testnet10の左に表示されている「126b7bb42100」ですね。

$ docker network rm 126b7bb42100

 確認します。

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

 削除できました。

複数のネットワークを一度に削除する

 ネットワークの削除は複数並べて指定することで一度に行うことが可能です。

 以下のようにネットワークtestnet100、testnet200、testnet300を作成しています。

$ docker network ls
NETWORK ID    NAME       DRIVER  SCOPE
3abe6d83703c  bridge     bridge  local
8a9d400abb35  host       host    local
9b510d65ac45  none       null    local
4f1cccaf6aaf  testnet100 bridge  local
20d8afeaada2  testnet200 bridge  local
5e9d7fdf0b6a  testnet300 bridge  local

 この状態で、testnet100とtestnet200とtestnet300を並べて指定して一度に削除します。

 試しに、testnet200だけはネットワークID「20d8afeaada2」を指定してみます。

$ docker network rm testnet100 20d8afeaada2 testnet300

 確認します。

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

 削除できました。

おわりに

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

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

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

 最後までお読みいただきありがとうございました。

コメント