解决docker run报错:172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name...

在网上找了一下原因:

通过分析异常信息,发现是因为在进行原地址到目标地址转换的时候没有在docker主机的iptables规则中找到nat表规则,只有filter表规则。
在filter表上面增加nat表配置规则信息,需要说明的是docker容器的网段是172.17.0.0/16,另外需要注意filter表中也要有docker链的相关配置。

其实是因为docker 要开启新的一个ip段 ; 你可以查看ip addr ;
查看docker0 的网卡 ; 就可以看到 docker0 会有一个新的ip;从书上看到记得docker的ip地址好像是172.16 到172.30. 这边要从宿主机去改一下防火墙的配置,对应文件应该为/etc/sysconfig/iptables.
但是

你可能会发现centos7 用firewall取代了iptales,你会找不到文件
/etc/sysconfig/iptables

这时候;采取以下方法:

首先进入cd /etc/sysconfig 目录下

不管防火墙有没有关 都使用systemctl stop firewalld 关闭防火墙
systemctl disable firewalld.service   #禁止firewall开机启动
然后使用 yum install iptables-services 安装或更新服务
再使用systemctl enable iptables 启动iptables
最后 systemctl start iptables 打开iptables
大功告成
试试service iptables save

这时候 你会发现目录下就生成了iptables 文件; 如果想了解更多关于centos7下面的iptables配置 CentOS7下iptables配置过程 这篇博客很详细.

到这时候我们才开始准备解决题目的问题:
打开IPtables 文件 加入如下配置: 注意:并不是覆盖而是加入;在原有的*nat 和*fileter下面 加入这边的一些配置规则;分别在原有的规则最后加就可以;可以把我下面列出来的规则直接复制过去 ; 关于这个配置 ;也可参见微博:docker 启动报错

*nat
:PREROUTING ACCEPT [27:11935]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [598:57368]
:POSTROUTING ACCEPT [591:57092]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
COMMIT  
# Completed on Sun Sep 20 17:35:31 2015
# Generated by iptables-save v1.4.21 on Sun Sep 20 17:35:31 2015
*filter
:INPUT ACCEPT [139291:461018923]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [127386:5251162]
:DOCKER - [0:0]
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
COMMIT  
# Completed on Sun Sep 20 17:35:31 2015

完成后重启一下 iptables ; docker 再run 镜像的时候 便不会报错

猜你喜欢

转载自blog.csdn.net/qq_14853889/article/details/79678406