Q:docker run -itd --name=NAME --net host IMAGE bash 启动容器后,容器中无法连接外网
A:进入容器 docker exec -ti [NAMES] /bin/bash
设置防火墙
使用命令iptables -n -L 可以查看当前防火墙的状态以及规则
由上面的可以看到防火墙都没有配置,都是空的。如果大家要清空自己的防火墙配置可以用命令
启用防火墙配置,当然首先要允许远程,我本地的远程端口没有改到,建议改的。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
除了远程,我们还有其它的端口是需要开放使用的,例如做网站服务器的,还需要开放80 端口。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
因为服务器要使用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
以上是我服务器允许开放的端口都允许通过了,最后其它的都禁止就可以了。
最后 保存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