Docker使用的网段和VPC网段冲突导致容器不能正常访问VPC

Docker使用的网段和VPC网段冲突导致容器不能正常访问VPC

更新时间:2018-11-24 17:21:31

问题描述

容器服务使用的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的网段。
  1. 执行如下命令,找到使用docker_gwbridge的容器。
    docker network inspect docker_gwbridge | grep gateway | cut -d '_' -f 2 | cut -d '"' -f 1
    
  2. 执行如下命令,停止容器。
    docker stop [$Container_ID]
    
    注:[$Container_ID]为容器ID。
  3. 执行如下命令,重建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网段。
  4. 执行如下命令,启动容器。
    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
    
  • 重新创建集群

适用于

  • 容器服务