Docker使用的网段和VPC网段冲突导致容器不能正常访问VPC
问题描述
容器服务使用的VPC网络,在容器内不能访问同一VPC网络中的ECS实例和RDS实例。在容器中Ping实例地址,系统显示类似如下。

问题原因
Docker使用的网段和VPC网段冲突。
解决方案
问题分析
登录ECS实例,执行如下命令,查看路由。
route -n
系统显示类似如下,确认docker_gwbrideg使用网段x.x.0.0,和VPC网段x.x.200.0/24的路由冲突,导致容器内不能正常访问到VPC的网段。

解决方法
目前有下面3种解决办法。
- 把节点上的容器停止后,修改docker_gwbridge的网段。
- 执行如下命令,找到使用docker_gwbridge的容器。
docker network inspect docker_gwbridge | grep gateway | cut -d '_' -f 2 | cut -d '"' -f 1
- 执行如下命令,停止容器。
docker stop [$Container_ID]
注:[$Container_ID]为容器ID。 - 执行如下命令,重建docker_gwbridge网络。
docker network rm docker_gwbridgedocker network create --subnet [$Net_IP] --opt com.docker.network.bridge.name=docker_gwbridge --opt com.docker.network.bridge.enable_icc=false --opt com.docker.network.bridge.enable_ip_masquerade=true docker_gwbridge
注:[$Net_IP]为自定义不冲突的docker_gwbridge网段。 - 执行如下命令,启动容器。
docker start [$Container_ID]
- 通过占用Docker的网段,避免docker_gwbridge选择冲突的网段。执行如下命令,使docker_gwbridge占用Docker的网段。
service docker stop; rm -fr /var/lib/docker/network/; ip link del docker_gwbridge; ip route add 172.19.0.0/16 dev eth0; service docker start
- 重新创建集群
适用于
- 容器服务