1.目的
在一台主机上,部署两个docker容器,并实现容器间的通信,从而实现greenplum7.2多节点集群部署。因此需要通过docker network构建自定义网络。
2.现象
执行docker network create --subnet=172.20.0.0/16 gp_net,报如下错误:
3.原因
Docker 不允许两个网络在同一个地址空间(address space) 中重叠。这是为了避免 IP 地址冲突和网络混乱。
3.1执行 docker network ls能查看所有 Docker 网络
3.2执行 docker network inspect harbor查看harbor网络的详细内容
注通过docker network inspect ***查看每个网络的详细内容,看到底哪个网络占用了172.20段网络。
[
{
"Name": "harbor",
"Id": "78aad0dbd2e50ff4e4aa429a0a6bdbddc56d52a067e0b9f56d7b62b3f58020e6",
"Created": "2025-06-21T14:11:13.990048474+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
3.4发现172.20段网络被harbor所用,因此我们还一个172.19段进行gp_net的通信
4.docker network子命令详解
docker network 子命令用于管理 Docker 网络,提供了创建、查看、修改和删除网络等功能。以下是每个 docker network 命令的详细说明:
1. connect
功能:将一个容器连接到指定的网络。
使用场景:当你需要在容器启动后将其添加到额外的网络中时使用。
示例:
docker network connect my_network my_container
这会将名为 my_container 的容器连接到名为 my_network 的网络。
2. create
功能:创建一个新的 Docker 网络。
使用场景:当需要为一组容器定义自定义网络以实现隔离或特定的网络配置时使用。
示例:
docker network create --driver bridge my_custom_network
这会创建一个名为 my_custom_network 的桥接网络(默认驱动)。
3. disconnect
功能:从网络中断开一个容器。
使用场景:当你想移除容器与某个网络的关联而不必停止或删除容器时使用。
示例:
docker network disconnect my_network my_container
这会将名为 my_container 的容器从 my_network 网络断开。
4. inspect
功能:显示一个或多个网络的详细信息。
使用场景:用于获取关于特定网络的详细配置信息,如子网、网关等。
示例:
docker network inspect my_network
这将返回有关 my_network 的详细信息,包括其配置和连接的容器。
5. ls
功能:列出所有 Docker 网络。
使用场景:用于查看系统上现有的所有网络及其基本信息。
示例:
docker network ls
这会列出所有当前存在的 Docker 网络及其 ID、名称、驱动类型等。
6. prune
功能:移除所有未使用的网络。
使用场景:清理不再需要的网络资源,释放系统资源。
示例:
docker network prune
这将提示你确认是否要删除所有未被任何容器使用的网络。
7. rm
功能:移除一个或多个 Docker 网络。
使用场景:当你确定某些网络不再需要并希望手动清理它们时使用。
注意:不能删除正在被容器使用的网络。
示例:
docker network rm my_network_1 my_network_2
这将尝试删除名为 my_network_1 和 my_network_2 的网络。
使用技巧
网络驱动选项:在创建网络时可以指定不同的驱动程序(例如 bridge, overlay, host, macvlan),以适应不同的网络需求。
检查网络冲突:在设计网络拓扑时,请确保不同网络之间没有 IP 地址冲突,特别是在多主机环境中使用 overlay 网络时尤为重要。
利用标签(Labels):可以通过 --label 参数为网络添加元数据,方便管理和查找特定网络。