Docker 容器内无法通过 HTTP 访问外网

现象

  • 内/外网 IP 和 域名 可以 ping 通
  • 容器内无法访问宿主机所在内网及外网的 Web 服务(404)
  • 通过 curl 查看返回头信息感觉是所有 Web 请求被中转到一个固定的 Nginx 服务器
  • 所有容器(包括新创建的)均出现以上问题

分析

  • 通过 docker run --net host 创建的容器不存在上述的问题
  • docker run 默认使用 bridge 桥接网络,初步判断是 bridge 设置问题
  • 通过 自定义网桥 也未解决问题
  • 最终怀疑是宿主机上的桥接网卡 docker0 的问题

解决

通过重建 docker0 网络解决问题

$ sudo service docker stop
$ sudo pkill docker
$ sudo iptables -t nat -F
$ sudo ifconfig docker0 down
$ sudo brctl delbr docker0
$ sudo service docker start

其实最终也没有确定问题所在,只是暂时解决了问题。