# docker network rm

## 描述

删除一个或多个**用户自定义的 Docker 网络**。

> ⚠️ 注意：只有**未被任何容器使用**的网络才能被删除。如果网络仍有容器连接（包括已停止的容器），Docker 会拒绝删除并报错。

内置网络（如 `bridge`、`host`、`none`）**无法被删除**。

## 用法

```bash
docker network rm NETWORK [NETWORK...]
```

你可以同时指定多个网络名称或 ID 进行批量删除。

### 别名

* `docker network remove` 是 `docker network rm` 的等效别名。

## 示例

### 1. 删除单个网络

```bash
$ docker network rm my_network
my_network
```

成功时，命令会回显被删除的网络名称。

### 2. 批量删除多个网络

```bash
$ docker network rm net1 net2 net3
net1
net2
net3
```

### 3. 结合 `docker network ls -q` 批量清理（谨慎使用！）

```bash
# 删除所有用户自定义且未使用的网络（等价于 prune）
$ docker network rm $(docker network ls --filter type=custom -q)
```

> 🔒 **安全提示**：如果某个网络正被容器使用，该命令会跳过它并报错，不会影响其他网络的删除。

## 常见错误与处理

### ❌ 错误：网络正在被容器使用

```
Error response from daemon: network my_network is in use by container abc123def456
```

✅ **解决方法**：

1. 先断开容器连接：

   ```bash
   docker network disconnect my_network abc123def456
   ```
2. 或直接删除容器（如果不再需要）：

   ```bash
   docker rm abc123def456
   ```
3. 然后再删除网络。

### ❌ 错误：尝试删除内置网络

```bash
$ docker network rm bridge
Error response from daemon: bridge is a pre-defined network and cannot be removed
```

✅ **说明**：`bridge`、`host`、`none` 是 Docker 内置网络，禁止删除。

## 与 `docker network prune` 的区别

| 命令                         | 行为                       |
| -------------------------- | ------------------------ |
| `docker network rm <name>` | 删除**指定**的一个或多个网络（必须未被使用） |
| `docker network prune`     | 自动删除**所有**未被使用的用户自定义网络   |

* 如果你知道要删哪个网络 → 用 `rm`
* 如果你想清理所有“悬空”网络 → 用 `prune`

## 验证是否删除成功

删除后可通过以下方式确认：

```bash
# 1. 检查列表中是否还存在
docker network ls --filter name=my_network

# 2. 尝试 inspect（应报错）
docker network inspect my_network
```

预期输出：无结果 或 `Error: No such network: my_network`
