8

docker容器无法访问外网

 3 years ago
source link: https://www.wencst.com/archives/626
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

docker容器无法访问外网

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

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 设置的网络规则,而导致容器内的网络无法和外部互联。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK