docker network 命令用于管理 Docker 网络。它允许你创建、检查、列出、连接、断开和删除 Docker 网络。下面是一些常用的子命令和使用 docker 网络命令的示例:
该命令提供在 Docker 主机上创建的所有网络的列表。下面是使用方法:
docker network ls
运行该命令后,Docker 会输出一个表格,其中包含每个网络的信息,包括 ID、名称、驱动程序和范围(本地或全局)。输出结果如下
NETWORK ID NAME DRIVER SCOPE
abcdef123456 bridge bridge local
ghijkl789012 host host local
mnopqr345678 my-network bridge local
stuvwx901234 my-overlay-net overlay swarm
在此示例输出中
- --IP-range 172.18.0.0/24:定义可分配给该网络上容器的 IP 地址范围。
docker network ls 命令可用于快速检查系统中现有的 Docker 网络及其基本属性。
要检查某个 Docker 网络并查看其详细信息,可以使用 docker network inspect 命令,后面跟上网络名称或 ID。
docker network inspect NETWORK_NAME_OR_ID
用要检查的 Docker 网络的实际名称或 ID 替换 NETWORK_NAME_OR_ID。例如,如果要检查名为 my-network 的网络,可以使用
docker network inspect my-network
docker network inspect 命令的输出会提供指定网络的全面详细信息,包括其配置、连接到该网络的容器、IP 地址范围等。这些信息以 JSON 格式呈现。
输出示例
[
{
"Name": "my-network",
"Id": "abcdef1234567890",
"Created": "2022-01-01T12:00:00Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Containers": {
"container1": {
"Name": "container1",
"EndpointID": "xyz123456789",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"container2": {
"Name": "container2",
"EndpointID": "abc987654321",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
输出结果包含网络名称、ID、创建时间、驱动程序、IP 地址管理 (IPAM) 配置、连接的容器和其他选项等信息。这些信息对于排除故障、管理网络配置或了解 Docker 中的网络设置非常有用。
要创建 Docker 网络,可以使用 docker network create 命令,然后输入所需的选项和网络名称。
docker network create my-network
该命令使用默认网桥驱动程序和默认选项创建名为 my-network 的 Docker 网络。如果你想指定其他选项,如网络驱动程序、子网、网关或其他配置,可以在命令中包含这些选项。
下面是一个使用自定义选项创建 Docker 网络的示例:
docker network create \
--driver bridge \
--subnet 172.18.0.0/16 \
--gateway 172.18.0.1 \
--ip-range 172.18.0.0/24 \
my-custom-network
在这个例子中
- my-network 是要连接容器的网络名称。
运行 docker network create 命令后,Docker 将根据提供的配置创建指定的网络。你可以使用 docker network ls 命令列出 Docker 主机上的所有网络,以验证网络是否已创建。
要将 Docker 容器连接到网络,可以使用 docker network connect 命令,然后输入网络名称和容器名称或 ID。
docker network connect my-network my-container
在这个例子中
- my-network 是要断开容器连接的网络名称。
运行此命令后,指定容器(my-container)将连接到 my-network 网络。这样,容器就可以使用容器名称或网络中的 IP 地址与同一网络中的其他容器通信。
要断开 Docker 容器与网络的连接,可以使用 docker network disconnect 命令,然后输入网络名称和容器名称或 ID。
docker network disconnect my-network my-container
在这个例子中
- my-container 是要断开网络连接的容器的名称或 ID。
运行此命令后,指定容器(my-container)将与 my-network 网络断开连接。这意味着该容器将无法再与该网络上的其他容器通信,尽管它可能仍连接到其他网络或拥有自己的网络命名空间。
要移除一个 Docker 网络,可以使用 docker network rm 命令,然后输入要移除的网络名称或 ID。
docker network rm my-network
- --subnet=192.168.1.0/24指定新 IPAM 配置的子网。您可以根据网络要求调整子网。
运行此命令后,Docker 将删除指定的网络 (my-network)。任何专门连接到该网络的容器都将断开与该网络的连接。不过,如果一个容器连接了多个网络,其中一个被删除后,该容器仍会与其他网络连接。
docker network prune 命令用于删除系统中所有未使用的 Docker 网络。未使用的网络是指没有连接到任何容器的网络。通过删除不再使用的网络,该命令有助于清理 Docker 环境。
docker network prune
在不带任何选项的情况下运行 docker network prune 时,Docker 会提示你确认是否要删除所有未使用的网络。你可以输入 "y",然后按 Enter 键继续删除。
如果想跳过确认提示,可以使用 -f 或 --force选项:
docker network prune -f
该命令将立即删除所有未使用的网络,而无需请求确认。
注意 - 请务必注意,docker network prune 命令只移除未使用的网络。一个或多个容器仍在使用的网络不会被移除。
docker network create-ipam 命令用于为 Docker 网络创建新的 IP 地址管理(IPAM)配置。IPAM 允许你定义自定义的 IP 地址范围、子网、网关和其他网络配置。
docker network create-ipam --subnet=192.168.1.0/24 my-custom-network
在这个例子中
- my-custom-network 是要将容器连接到的具有自定义 IPAM 配置的 Docker 网络的名称。
运行 docker network create-ipam 命令后,Docker 将为 my-custom-network Docker 网络创建一个新的 IPAM 配置,并指定子网。这样,你就可以为连接到该网络的容器定义特定的 IP 地址范围和网络设置。
值得注意的是,自定义 IPAM 配置是可选的,Docker 会为未指定自定义配置而创建的网络提供默认 IPAM 设置。自定义 IPAM 配置适用于需要精确控制 IP 地址分配和网络参数的高级网络场景。
docker network connect-ipam 命令用于将容器连接到具有自定义 IP 地址管理(IPAM)配置的 Docker 网络。IPAM 允许你定义特定的 IP 地址范围、子网、网关和其他网络设置。
docker network connect-ipam --ip=192.168.1.10 my-custom-network my-container
在这个例子中
- my-custom-network 是具有自定义 IPAM 配置的 Docker 网络的名称,您要断开容器与该网络的连接。
运行 docker network connect-ipam 命令后,Docker 会使用自定义 IPAM 配置将指定容器(my-container)连接到 my-custom-network Docker 网络。容器将被分配到网络上指定的 IP 地址(192.168.1.10)。
使用带有自定义 IPAM 配置的 docker network connect-ipam 命令,可以让你对连接到 Docker 网络的容器的 IP 地址分配和网络参数拥有更多控制权。
docker network disconnect-ipam 命令用于断开容器与具有自定义 IP 地址管理(IPAM)配置的 Docker 网络的连接。该命令专为具有自定义 IPAM 设置的网络而设计。
docker network disconnect-ipam my-custom-network my-container
在这个例子中
- my-container 是要断开网络连接的容器的名称或 ID。
运行 docker network disconnect-ipam 命令后,Docker 会断开指定容器(my-container)与带有自定义 IPAM 配置的 my-custom-network Docker 网络的连接。
需要注意的是,docker network disconnect-ipam 命令专门用于自定义 IPAM 配置的网络。对于使用默认 IPAM 设置的网络,你可以使用普通的 docker network disconnect 命令,而不用 -ipam 后缀。
默认情况下,创建网桥网络时未启用 DNS。但如果我们创建自定义桥接网络,DNS 默认会启用。
loclhost:~$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
localhost:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
6c51373f78ad bridge bridge local
3a33f83c3664 host host local
e4ebd601732e none null local
localhost:~$ docker container run -itd ubuntu:14.04 bash
7b1af2ee48e43f8018c4324bbcb9f52a27f741bd7a0437ddd0f6766bd7ca6b10
localhost:~$ docker container run -itd ubuntu:14.04 bash
c3ce5dbe5d859705f139e811bc11367d02bf0969492e9d515a3cc6cc636ddfbb
localhost:~$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3ce5dbe5d85 ubuntu:14.04 "bash" 8 seconds ago Up 7 seconds unruffled_sinoussi
7b1af2ee48e4 ubuntu:14.04 "bash" 10 seconds ago Up 9 seconds trusting_joliot
localhost:~$ docker container exec -it 7b bash
root@7b1af2ee48e4:/# ping c3ce5dbe5d85
ping: unknown host c3ce5dbe5d85
root@7b1af2ee48e4:/#
为了实现上述用例,让我们先创建一个网络 "测试":
localhost:~$ docker network create test
b1e05c1afdb2f901e81a66a52d64a9dcdca9c5cab98433cdaed2faa83c5b3e6b
localhost:~$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
localhost:~$
现在,用 ubuntu 映像创建一个容器,网络名为 "test":
localhost:~$ docker container run -itd --network=test ubuntu:14.04 bash
c7b07b61bb20cdbb6e1b54a165aed0f8907d95d563fdd7a60940d004694c4557
列出容器清单:
localhost:~$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7b07b61bb20 ubuntu "bash" About a minute ago Up About a minute clever_wu
使用 inspect 命令检查容器:
"Networks": {
"host": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "b1e05c1afdb2f901e81a66a52d64a9dcdca9c5cab98433cdaed2faa83c5b3e6b",
"EndpointID": "b860ca4fdda3e0732367949cb94fd2eded08a4f2e46715a6c125b1bf336c102f",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null
}
}
删除网络
localhost:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
6c51373f78ac bridge bridge local
3a33f83c3663 host host local
e4ebd601732c none null local
348f7295d3ca test bridge local
localhost:~$ docker network rm test
test
localhost:~$