# network

<!---MARKER_GEN_START-->
Manage networks

### Subcommands

| Name                                  | Description                                          |
|:--------------------------------------|:-----------------------------------------------------|
| [`connect`](network_connect.md)       | Connect a container to a network                     |
| [`create`](network_create.md)         | Create a network                                     |
| [`disconnect`](network_disconnect.md) | Disconnect a container from a network                |
| [`inspect`](network_inspect.md)       | Display detailed information on one or more networks |
| [`ls`](network_ls.md)                 | List networks                                        |
| [`prune`](network_prune.md)           | Remove all unused networks                           |
| [`rm`](network_rm.md)                 | Remove one or more networks                          |



<!---MARKER_GEN_END-->

## Description

Manage networks. You can use subcommands to create, inspect, list, remove,
prune, connect, and disconnect networks.
