
最近踩了一個坑,阿里雲通過雲企業網(騰訊雲叫雲聯網)專線網關接入騰訊雲,實現多雲內網互聯,本來這是個很普通的事情,騰雲側的IP段是
172.16.19.9/20,阿里雲側網段是172.16.18.0/20,但是經測試雙向網絡無法互通,騰訊雲側在專線網關無法往下路由,阿里雲側壓根就沒跳出vpc網絡,tracetoute發現網絡在本地出不去了~最后排查發現是本地的Docker橋接網絡IP段是172.16.19.0/16,跟騰訊側的望斷沖突突突突突了~,SO~就需要考慮如何在不停止Docker容器的情況下修改網絡,觀靡了一下Docker的文檔,發現可以實現這個騷(普通)操作!過程如下:
1.更改網絡
###解除容器綁定的網絡 網絡名詞root_default 容器名稱root_redis_1
[root@ecs-test-01 ~]# docker network disconnect root_default root_redis_1
##刪除原先的網絡
[root@ecs-test-01 ~]# docker network rm root_default
##重新創建容器網絡
[root@ecs-test-01 ~]# docker network create --subnet=172.22.16.0/24 root_default
7d40e0be1fcade91f8109a54a05bf0f012584e0bbb9449bec5335db247efd0be
##為容器重新指定網絡
[root@ecs-test-01 ~]# docker network connect root_default root_redis_1
##重新啟動容器
[root@ecs-test-01 ~]# docker container restart root_redis_1
2.查看效果
# 查看容器信息
[root@ecs-test-01 ~]# docker inspect root_mysql_1
省略部分輸出,內容如下:
"NetworkSettings": {
"Bridge": "",
"SandboxID": "91dccf255b8aa18584aa40d7295cb0f19da8a770628ab918cbb5fa53f9d8cb18",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"3306/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "3306"
}
]
},
"SandboxKey": "/var/run/docker/netns/91dccf255b8a",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"root_default": {
"IPAMConfig": {},
"Links": null,
"Aliases": [
"b0efc877eee7"
],
"NetworkID": "99da51f11fb7c61e6638f9bd420ddd278e13e05b364b304413115f447c9ae582",
"EndpointID": "ba5d1d152d63f059c3ac61cdcf95e0c75ee2b826b2dd92fdb9c10a0a5fb6b246",
"Gateway": "172.22.16.1",
"IPAddress": "172.22.16.5",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:16:10:05",
"DriverOpts": {}
}
}
}
再次測試雲聯網的網絡,發現網絡通了~搞定,打完收工!
