docker容器无法访问外网

作者: wencst 分类: docker 发布时间: 2017-08-25 11:31 阅读: 4,644 次

环境

system:CentOS 7.1.1503

core:3.10

network:非DHCP

docker:17.05 ce

问题

docker启动了swarm集群,在swarm集群中启动的容器,容器内无法访问外网,但宿主机可以访问外网。

在容器内ping宿主机和ping www.baidu.com,会提示如下结果:

排查

下面是我一系列的猜测及排查步骤:

怀疑一:与DHCP有关系

怀疑原因:在DHCP网络中执行同一个镜像可以访问外网,在非DHCP中创建的容器无法访问外网。

排除:与DHCP无关,只要宿主机可以访问外网,容器内就可以访问外网

怀疑二:与docker版本有关

怀疑原因:在docker1.12版本中执行没问题,在docker 17.05ce版本中执行有问题

排除:基本都是稳定版,docker不会做太大改动,而且这种基础bug应该不会在稳定版中出现

怀疑三:与swarm集群有关系

排除:在swarm集群节点中,手动创建了docker容器,同一个镜像的也无法访问

怀疑四:与DHCP的DNS有关系

排除:手动设置了DNS参数,依然无法访问外网,设置方法(docker service create -d -p 8888:8761 –name test –dns 114.114.114.114 alpine ping www.baidu.com)

怀疑五:与防火墙、安全组有关

怀疑原因:防火墙本身对端口有限制,swarm集群中容器访问外网也需要端口

排除:防火墙关闭了,并且去掉了自启动

解决

以上都是基于一些怀疑,做了排查的步骤,而实际是如何解决的呢?

实际是防火墙的问题,由于我是新的服务器,只安装了docker,关了防火墙,并没有重启。

防火墙在关闭后,需要重启宿主机,至少重启docker服务。

原因:防火墙的起、停、刷新这类行为会导致清空 Docker 设置的网络规则,而导致容器内的网络无法和外部互联。

 

 

如果文章对您有用,扫一下支付宝的红包,不胜感激!

kubernetes集群离线安装包, 仅需三步, HA安装:http://store.lameleg.com?referrer=wencst



4 Comments
  • Thanks for some other informative site. Where else may I am getting that type of info written in such a perfect approach? I’ve a challenge that I’m just now working on, and I’ve been on the glance out for such information.

  • December 10, 2017 at 6:46 pm

    Wonderful websіte. A lot of helpful info here. I’m sending it to some friends ans additionally sharing in delicious.
    And obᴠiouѕly, thanks for your sweat!

  • Stevegeoda

    September 17, 2017 at 11:25 pm

    Find out what you need to improve in yourself to become more effective!

  • 笑八达

    August 29, 2017 at 11:09 am

    世间博客不少,风景这边独好!

Leave a Reply