docker 容器无法连接外网

Q:docker run -itd --name=NAME --net host IMAGE bash  启动容器后,容器中无法连接外网

A:进入容器 docker exec -ti [NAMES] /bin/bash

设置防火墙

  1. 使用命令iptables  -n -L  可以查看当前防火墙的状态以及规则

  2. 由上面的可以看到防火墙都没有配置,都是空的。如果大家要清空自己的防火墙配置可以用命令

  3. 启用防火墙配置,当然首先要允许远程,我本地的远程端口没有改到,建议改的。

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

  4. 除了远程,我们还有其它的端口是需要开放使用的,例如做网站服务器的,还需要开放80 端口。

     iptables -A INPUT -p tcp --dport 80 -j ACCEPT

    iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

  5. 因为服务器要使用DNS解析,所以还要允许服务器与DNS服务器之间的数据通信,直接允许那个IP 可以了。我使用的DNS 是  114.114.114.114

    iptables -A INPUT -s 114.114.114.114 -j ACCEPT

    iptables -A OUTPUT -d 114.114.114.114 -j ACCEPT

  6. 以上是我服务器允许开放的端口都允许通过了,最后其它的都禁止就可以了。

    最后 保存iptables的规则,我个人的服务器里边不需要其它的操作,所以只是做简单的规则就可以了。

    service iptables save

 

ps:

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

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

 

如果想要测试某个容器的网络吞吐量,可以写一个死循环的脚本,比如:

while(true)

do 

wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.79/bin/apache-tomcat-7.0.79.tar.gz

sleep 10

done

然后打开另一个shell窗口,在容器外面使用命令 docker stats 可以查看每个运行中的容器的网络流量.

转载于:https://my.oschina.net/jack088/blog/3007769