# docker network ls

## 描述

列出 Docker 引擎已知的所有网络。

该命令会显示本地主机上的所有网络，以及在 Swarm 集群中跨主机的网络（如 overlay 网络）。

## 用法

```bash
docker network ls [OPTIONS]
```

### 别名

* `docker network list` 是 `docker network ls` 的等效别名。

## 选项

\| 选项 | 默认值 | 描述 | | ---- | | | | `-f`, `--filter` | 无 | 根据条件过滤输出结果（例如 `driver=bridge`、`scope=swarm` 等） | | `--format` | 无 | 使用自定义 Go 模板格式化输出： • `'table'`：以表格形式输出（默认） • `'json'`：输出为 JSON 格式 • `'TEMPLATE'`：使用自定义 Go 模板 详见 [Docker 输出格式化指南](https://docs.docker.com/go/formatting/) | | `--no-trunc` | false | 不截断输出（显示完整的网络 ID） | | `-q`, `--quiet` | false | 仅显示网络 ID（适用于脚本批量处理） |

## 示例

### 1. 列出所有网络（默认）

```bash
$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
7fca4eb8c647   bridge    bridge    local
9f904ee27bf5   none      null      local
cf03ee007fb4   host      host      local
78b03ee04fc4   mynet     bridge    local
```

### 2. 显示完整网络 ID（不截断）

```bash
$ docker network ls --no-trunc
NETWORK ID                                                         NAME      DRIVER    SCOPE
18a2866682b85619a026c81b98a5e375bd33e1b0936a26cc497c283d27bae9b3   none      null      local
c288470c46f6c8949c5f7e5099b5b7947b07eabe8d9a27d79a9cbf111adcbf47   host      host      local
7b369448dccbf865d397c8d2be0cda7cf7edc6b0945f77d2529912ae917a0185   bridge    bridge    local
```

### 3. 仅显示网络 ID（用于脚本）

```bash
$ docker network ls -q
7fca4eb8c647
9f904ee27bf5
cf03ee007fb4
78b03ee04fc4
```

## 过滤（`--filter`）

过滤格式为 `key=value`。支持多个过滤器（多个 `-f`），**逻辑为 OR**（满足任一条件即显示）。

### 支持的过滤字段：

| 过滤键      | 说明                                    |
| -------- | ------------------------------------- |
| `driver` | 网络驱动（如 `bridge`、`overlay`）            |
| `id`     | 网络 ID（支持完整 ID 或前缀匹配）                  |
| `label`  | 标签（`label=key` 或 `label=key=value`）   |
| `name`   | 网络名称（支持子字符串匹配）                        |
| `scope`  | 作用域（`local`、`global`、`swarm`）         |
| `type`   | 类型：`builtin`（内置网络）或 `custom`（用户创建的网络） |

### 示例：

#### 只显示使用 `bridge` 驱动的网络

```bash
$ docker network ls --filter driver=bridge
```

#### 显示名称包含 `dev` 的网络

```bash
$ docker network ls --filter name=dev
```

#### 显示用户自定义的网络（非内置）

```bash
$ docker network ls --filter type=custom
```

#### 批量删除所有自定义网络（谨慎使用！）

```bash
$ docker network rm $(docker network ls --filter type=custom -q)
```

> ⚠️ 如果网络仍有容器连接，Docker 会拒绝删除并发出警告。

#### 按标签过滤

```bash
# 匹配带有 label "env" 的网络（任意值）
$ docker network ls --filter "label=env"

# 匹配 label "env=prod" 的网络
$ docker network ls --filter "label=env=prod"
```

## 自定义输出格式（`--format`）

使用 Go 模板语法控制输出内容。常用占位符：

| 占位符            | 说明                               |
| -------------- | -------------------------------- |
| `.ID`          | 网络 ID                            |
| `.Name`        | 网络名称                             |
| `.Driver`      | 驱动类型                             |
| `.Scope`       | 作用域                              |
| `.IPv6`        | 是否启用 IPv6（`true`/`false`）        |
| `.Internal`    | 是否为内部网络                          |
| `.Labels`      | 所有标签（字符串）                        |
| `.Label "key"` | 特定标签的值（如 `{{.Label "version"}}`） |
| `.CreatedAt`   | 创建时间                             |

### 示例：

#### 自定义列输出（ID 和驱动，用冒号分隔）

```bash
$ docker network ls --format "{{.ID}}: {{.Driver}}"
afaab448eb2: bridge
d1584f8dc718: host
391df270dc66: null
```

#### 表格形式（带标题）

```bash
$ docker network ls --format "table {{.Name}}\t{{.Driver}}\t{{.Scope}}"
NAME      DRIVER    SCOPE
bridge    bridge    local
host      host      local
none      null      local
mynet     bridge    local
```

#### 输出为 JSON（便于程序解析）

```bash
$ docker network ls --format json
{"CreatedAt":"2021-03-09T21:41:29.798999529Z","Driver":"bridge","ID":"f33ba176dd8e","IPv6":"false","Internal":"false","Labels":"","Name":"bridge","Scope":"local"}
{"CreatedAt":"2021-03-09T21:41:29.772806592Z","Driver":"host","ID":"caf47bb3ac70","IPv6":"false","Internal":"false","Labels":"","Name":"host","Scope":"local"}
...
```

> 💡 提示：`--format json` 是 Docker CLI 内置的快捷方式，等价于 `--format '{{json .}}'`。
