解决docker run报错:172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name...
2018-03-24 21:01
731 查看
在网上找了一下原因:
通过分析异常信息,发现是因为在进行原地址到目标地址转换的时候没有在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. 这边要从宿主机去改一下防火墙的配置,对应文件应该为
但是
这时候;采取以下方法:
这时候 你会发现目录下就生成了iptables 文件; 如果想了解更多关于centos7下面的iptables配置 CentOS7下iptables配置过程 这篇博客很详细.
到这时候我们才开始准备解决题目的问题:
打开IPtables 文件 加入如下配置:
完成后重启一下 iptables ; docker 再run 镜像的时候 便不会报错
通过分析异常信息,发现是因为在进行原地址到目标地址转换的时候没有在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 镜像的时候 便不会报错
相关文章推荐
- docker 端口映射iptables: No chain/target/match by that name错误解决方法
- 设置ip转发提示iptables: No chain/target/match by that name错误的解决方法
- Centos 7 docker 启动容器 iptables 报 No chain/target/match by that name
- 设置ip转发提示iptables: No chain/target/match by that name错误的解决方法
- 设置ip转发提示iptables: No chain/target/match by that name错误的解决方法
- Centos 7 docker 启动容器 iptables 报 No chain/target/match by that name
- docker0: iptables: No chain/target/match by that name.
- docker0: iptables: No chain/target/match by that name错误处理
- iptables -t mangle -A PREROUTING -j MARK --set-mark 1提示iptables: No chain/target/match by that name
- Centos 7 docker 启动容器iptables 报No chain/target/match by that
- iptables: No chain/target/match by that name.
- Docker 启动时报错:iptables:No chain/target/match by the name
- docker启动容器报"iptables No chain/target/match"
- Rancher docker0: iptables: No chain/target/match
- 【Android】No resource found that matches the given name “xxx” 的解决方法
- apache2 [warn] NameVirtualHost *:80 has no VirtualHosts的解决方法
- 解决dwr报错【 Error: java.lang.SecurityException: No class by name: service】
- 解决error: Error retrieving parent for item: No resource found that matches the given name 'AppCompat'
- 怎样解决错误:error: Error: No resource found that matches the given name (at 'layout_toLeftOf' with value
- 解决No “rule to make target `../skin_test.qss', needed by `debug/qrc_resource.cpp'. Stop.”