Centos 7 docker 启动容器iptables报No chain/target/match by that name
启动一个有nat映射端口的容器时iptables 报No chain/target/match by that name
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 garland/zookeeper Error response from daemon: Cannot start container 565c06efde6cd4411e2596ef3d726817c58dd777bc5fd13762e0c34d86076b9e: iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3888 -j DNAT --to-destination 192.168.42.11:3888 ! -i docker0: iptables: No chain/target/match by that name
找了N多网站和官方issue后,还是没找到真正的解决方法,网上到处转载的只是分析了原因,
并没有明确的解决方案,为此与同事通宵加班终于解决了这个问题
找到系统的/etc/sysconfig/iptables
,如果没有用以下命令保存一下,然后查看里边的内容
iptables-save > /etc/sysconfig/iptables cat /etc/sysconfig/iptables
发现内容如下
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0]-N whitelist-A whitelist -s 192.168.42.0/24 -j ACCEPT#syn-N syn-flood-A INPUT -p tcp --syn -j syn-flood-I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN-A syn-flood -j REJECT#DOS-A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT## 省略一些简单的防火墙规则
查看启动容器的报错信息发现-A DOCKER
DOCKER链,但在iptables文件里并没有找到,
由于之前在自己的系统(archlinux)学习使用docker时并没遇到这问题,
所以马上去看了下自己系统里的iptables的文件,
内容如下
*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 -A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 1521 -j MASQUERADE-A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 22 -j MASQUERADE-A DOCKER ! -i docker0 -p tcp -m tcp --dport 49161 -j DNAT --to-destination 172.17.0.3:1521-A DOCKER ! -i docker0 -p tcp -m tcp --dport 49160 -j DNAT --to-destination 172.17.0.3:22COMMIT # 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 -A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 1521 -j ACCEPT-A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 22 -j ACCEPTCOMMIT # Completed on Sun Sep 20 17:35:31 2015
对比后以去掉不相关的规则,以现*nat
规则里有以下的对于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 POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADECOMMIT
*filter
规则里对docker的配置如下
*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 ACCEPTCOMMIT
去掉不相关规则后的配置文件如下(可以直接用):
*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 MASQUERADECOMMIT # 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 ACCEPTCOMMIT # Completed on Sun Sep 20 17:35:31 2015
然后再加上自己服务器的过滤规则,合并后覆盖到Centos 7的 /etc/sysconfig/iptables
文件
重启iptables 服务
systemctl restart iptables.service
两次启动对应docker容器,
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 garland/zookeeper
发现容器启动成功,虽然有警告,但并不影响容器的使用
PS: @孙振树 提供的解决办法: 如果iptables是在docker后安装的,把docker重新安装下就可以了
转自:http://www.lxy520.net/2015/09/24/centos-7-docker-qi-dong-bao/
转载于:https://blog.51cto.com/adson10/1896076
Centos 7 docker 启动容器iptables报No chain/target/match by that name相关推荐
- docker 启动容器报错及解决办法
docker 启动容器报错:Error response from daemon: oci runtime error: container_linux.go:247: starting contai ...
- docker 启动容器报 error creating overlay mount to /var/lib/docker/overlay2
问题: 今天用 docker 启动容器时,出现以下错误 Error response from daemon: error creating overlay mount to /var/lib/doc ...
- 解决 --- Docker 启动时报错:iptables:No chain/target/match by the name
问题:jenkins的docker containner启动失败,报错:failed programming external connectivity - iptables: No chain/ta ...
- docker启动容器服务之后访问失败
关于docker启动容器服务之后,宿主机访问失败(解决方法) 注:在进行docker容器启动宿主机进行容器访问时,无需进行网络的配置,docker容器在启动时会自动解决 第一种原因及修改方法 在进行启 ...
- CentOS7使用docker 启动容器后 , 宿主机连接访问不到容器的端口
CentOS7使用docker 启动容器后 , 宿主机连接访问不到容器的端口 注意第一种方法是在网上找的 , 我并没有执行成功 , 但是他分析的很不错, 可以参考第二种方法 首先需要明确docker的 ...
- docker启动容器发生Error response from daemon故障
今天在使用docker启动nginx的时候出现了 docker: Error response from daemon: driver failed programming external conn ...
- docker启动容器命令
docker启动容器命令: docker run -it ubuntu:16.04 bash //其中ubuntu后面的tag必须要加,否则会默认重新拉取并打开ubuntu:latest镜像 //如果 ...
- docker0: iptables: No chain/target/match by that name.
问题: Error response from daemon: driver failed programming external connectivityon endpoint jenkins ( ...
- docker之阿里云centos 7.x 启动容器报错处理办法
最近阿里云服务器(操作系统centOS 7.x) 安装docker,参照阿里云帮助文档https://help.aliyun.com/document_detail/51853.html?spm=a2 ...
最新文章
- Linux web 网站服务器 虚拟主机
- 如何测试一个空的JavaScript对象?
- 【Python CheckiO 题解】Best Stock
- 使用NUget发布自己的dll(转)
- php中颜色的索引值,PHP imagecolorsforindex - 取得某索引的颜色 - 有码中国
- 综合对比各个设计模式的思想
- Dev-C++的安装使用与介绍
- bootstrap EF_Bootstrap优秀模板INSPINIA.2.9.2
- Python监控股价并通过微信提醒
- delphi dbgrideh 行合并_如何轻松快速地合并FLV
- 饥荒联机版服务器控制台本地和在线,饥荒联机服务器常用控制台指令
- Python上使用及安装tesseract
- ASTER GDEM v3.0高程数据批量下载
- 在eclipse中使用subclipse
- 4. “随机漫步的傻瓜--纳西姆.尼古拉斯.塔勒布”读后感
- 使用HMC管理powerlinux
- (四)MySQL学习笔记——多表设计、多表查询、多表查询练习题
- Firebase 教程: iOS A/B 测试
- MySQL 一条语句实现若记录存在则更新,不存在则插入
- 一个简单的网页计算器-php网站建设代码段分享