Docker 网络命令
Source: Dev.to
请提供您希望翻译的具体文本内容,我将按照要求保留源链接、格式和技术术语,仅翻译正文部分。
Docker network 命令概览
docker network 命令用于管理 Docker 网络。它可以 创建、检查、列出、连接、断开 和 删除 网络。
1. 列出网络
docker network ls
示例输出
| NETWORK ID | NAME | DRIVER | SCOPE |
|---|---|---|---|
| abcdef123456 | bridge | bridge | local |
| ghijkl789012 | host | host | local |
| mnopqr345678 | my-network | bridge | local |
| stuvwx901234 | my-overlay-net | overlay | swarm |
说明
| 列 | 描述 |
|---|---|
| NETWORK ID | 每个网络的唯一标识符 |
| NAME | 网络名称 |
| DRIVER | 驱动类型(例如 bridge、overlay、host) |
| SCOPE | local – 仅在当前主机上;global – 跨 Swarm |
2. 检查网络
docker network inspect <name-or-id>
将 <name-or-id> 替换为实际的名称或 ID。
示例
docker network inspect my-network
示例 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": {}
}
]
检查结果提供了创建时间、驱动、IPAM 配置、已连接容器等详细信息——对排障和了解网络设置非常有帮助。
3. 创建网络
简单创建(默认 bridge 驱动)
docker network create my-network
使用选项的自定义创建
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
| 选项 | 含义 |
|---|---|
--driver bridge | 使用 bridge 驱动 |
--subnet 172.18.0.0/16 | 定义网络子网 |
--gateway 172.18.0.1 | 设置网关 IP |
--ip-range 172.18.0.0/24 | 限制容器可分配的 IP 范围 |
my-custom-network | 新网络的名称 |
使用 docker network ls 验证创建是否成功。
4. 将容器连接到网络
docker network connect my-network my-container
my-network– 目标网络名称my-container– 容器名称或 ID
容器现在可以通过名称或 IP 地址与 my-network 上的其他容器通信。
5. 将容器从网络断开
docker network disconnect my-network my-container
my-network– 要断开的网络my-container– 容器名称或 ID
断开后,容器将失去与该网络上同伴的通信(但仍可能连接到其他网络)。
6. 删除网络
docker network rm <network>
将 <network> 替换为要删除的网络。
示例
docker network rm my-network
注意: 当网络仍有容器附着时,无法将其删除。
先断开或停止那些容器。
Docker 网络命令速查表
以下是常用 Docker 网络命令的整理参考,包括用法和示例。
1. 删除网络
docker network rm <network>
示例
docker network rm my-network
my-network 是要删除的 Docker 网络的名称(或 ID)。Docker 会删除指定网络;仅连接到该网络的容器会被断开,而同时连接到多个网络的容器仍保持与其他网络的连接。
2. 清理未使用的网络
docker network prune
直接运行该命令会提示确认:
WARNING! This will remove all unused networks.
Are you sure you want to continue? [y/N] y
跳过确认
docker network prune -f # 或者 --force
仅会删除 未使用 的网络(即未被任何容器附加的网络)。仍在使用中的网络不会受到影响。
3. 创建自定义 IPAM 配置
docker network create-ipam --subnet=<subnet> <network-name>
示例
docker network create-ipam --subnet=192.168.1.0/24 my-custom-network
--subnet=192.168.1.0/24– 为网络定义 IP 地址范围。my-custom-network– 将使用该 IPAM 配置的 Docker 网络名称。
如果省略自定义 IPAM,Docker 将使用默认设置。
4. 使用自定义 IPAM 连接容器
docker network connect-ipam --ip=<ip> <network-name> <container>
示例
docker network connect-ipam --ip=192.168.1.10 my-custom-network my-container
--ip=192.168.1.10– 为容器在该网络上分配的静态 IP。my-custom-network– 具备自定义 IPAM 配置的网络。my-container– 目标容器。
5. 从自定义 IPAM 网络断开容器
docker network disconnect-ipam <network-name> <container>
示例
docker network disconnect-ipam my-custom-network my-container
重要提示:
disconnect-ipam仅适用于使用自定义 IPAM 配置的网络。对于默认 IPAM 网络,请使用常规的docker network disconnect命令。
6. 示例:创建桥接网络并测试连通性
# 列出运行中的容器(此时没有)
docker container ls
#> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 列出已有网络
docker network ls
#> NETWORK ID NAME DRIVER SCOPE
#> 6c51373f78ad bridge bridge local
#> 3a33f83c3664 host host local
#> e4ebd601732e none null local
# 以分离模式运行两个 Ubuntu 容器
docker container run -itd ubuntu:14.04 bash
#> 7b1af2ee48e43f8018c4324bbcb9f52a27f741bd7a0437ddd0f6766bd7ca6b10
docker container run -itd ubuntu:14.04 bash
#> c3ce5dbe5d859705f139e811bc11367d02bf0969492e9d515a3cc6cc636ddfbb
# 验证它们正在运行
docker container ls
#> CONTAINER ID IMAGE COMMAND CREATED STATUS 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
# 尝试从一个容器 ping 另一个容器(会失败,因为它们在默认 bridge 上)
docker container exec -it 7b1af2ee48e4 bash
#> root@7b1af2ee48e4:/# ping c3ce5dbe5d85
#> ping: unknown host c3d5e5d85
# 创建自定义桥接网络(自定义桥接默认启用 DNS)
docker network create test
#> b1e05c1afdb2f901e
现在可以使用 docker network connect 或在启动容器时加 --network test 将容器附加到 test 网络,它们就能通过名称相互解析。
快速参考表
| 命令 | 用途 | 示例 |
|---|---|---|
docker network rm | 删除指定网络 | docker network rm my-network |
docker network prune | 删除所有 未使用 的网络 | docker network prune -f |
docker network create-ipam | 创建带自定义子网的网络 | docker network create-ipam --subnet=192.168.1.0/24 my-custom-network |
docker network connect-ipam | 使用指定 IP 将容器连接到自定义网络 | docker network connect-ipam --ip=192.168.1.10 my-custom-network my-container |
docker network disconnect-ipam | 从自定义 IPAM 网络断开容器 | docker network disconnect-ipam my-custom-network my-container |
docker network create | 创建普通(默认 IPAM)网络 | docker network create test |
| docker network create-ipam | 创建一个使用自定义 IPAM 的网络 | docker network create-ipam --subnet=10.0.0.0/24 my-net |
| docker network connect-ipam | 将容器附加到具有静态 IP 的网络 | docker network connect-ipam --ip=10.0.0.5 my-net my-container |
| docker network disconnect-ipam | 从自定义 IPAM 网络中分离容器 | docker network disconnect-ipam my-net my-container |
| docker network create | 创建一个常规(桥接)网络(启用 DNS) | docker network create test |
附加命令与示例
81a66a52d64a9dcdca9c5cab98433cdaed2faa83c5b3e6b
列出容器(无正在运行的)
localhost:~$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
在 test 网络上使用 ubuntu 镜像创建容器
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
检查容器(摘录)
{
"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:~$
📝 喜欢这篇博客吗?
Buy me a coffee ☕
什么是 None 网络驱动
Meghasharmaa