启动一个有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相关推荐

  1. docker 启动容器报错及解决办法

    docker 启动容器报错:Error response from daemon: oci runtime error: container_linux.go:247: starting contai ...

  2. docker 启动容器报 error creating overlay mount to /var/lib/docker/overlay2

    问题: 今天用 docker 启动容器时,出现以下错误 Error response from daemon: error creating overlay mount to /var/lib/doc ...

  3. 解决 --- Docker 启动时报错:iptables:No chain/target/match by the name

    问题:jenkins的docker containner启动失败,报错:failed programming external connectivity - iptables: No chain/ta ...

  4. docker启动容器服务之后访问失败

    关于docker启动容器服务之后,宿主机访问失败(解决方法) 注:在进行docker容器启动宿主机进行容器访问时,无需进行网络的配置,docker容器在启动时会自动解决 第一种原因及修改方法 在进行启 ...

  5. CentOS7使用docker 启动容器后 , 宿主机连接访问不到容器的端口

    CentOS7使用docker 启动容器后 , 宿主机连接访问不到容器的端口 注意第一种方法是在网上找的 , 我并没有执行成功 , 但是他分析的很不错, 可以参考第二种方法 首先需要明确docker的 ...

  6. docker启动容器发生Error response from daemon故障

    今天在使用docker启动nginx的时候出现了 docker: Error response from daemon: driver failed programming external conn ...

  7. docker启动容器命令

    docker启动容器命令: docker run -it ubuntu:16.04 bash //其中ubuntu后面的tag必须要加,否则会默认重新拉取并打开ubuntu:latest镜像 //如果 ...

  8. docker0: iptables: No chain/target/match by that name.

    问题: Error response from daemon: driver failed programming external connectivityon endpoint jenkins ( ...

  9. docker之阿里云centos 7.x 启动容器报错处理办法

    最近阿里云服务器(操作系统centOS 7.x) 安装docker,参照阿里云帮助文档https://help.aliyun.com/document_detail/51853.html?spm=a2 ...

最新文章

  1. Linux web 网站服务器 虚拟主机
  2. 如何测试一个空的JavaScript对象?
  3. 【Python CheckiO 题解】Best Stock
  4. 使用NUget发布自己的dll(转)
  5. php中颜色的索引值,PHP imagecolorsforindex - 取得某索引的颜色 - 有码中国
  6. 综合对比各个设计模式的思想
  7. Dev-C++的安装使用与介绍
  8. bootstrap EF_Bootstrap优秀模板INSPINIA.2.9.2
  9. Python监控股价并通过微信提醒
  10. delphi dbgrideh 行合并_如何轻松快速地合并FLV
  11. 饥荒联机版服务器控制台本地和在线,饥荒联机服务器常用控制台指令
  12. Python上使用及安装tesseract
  13. ASTER GDEM v3.0高程数据批量下载
  14. 在eclipse中使用subclipse
  15. 4. “随机漫步的傻瓜--纳西姆.尼古拉斯.塔勒布”读后感
  16. 使用HMC管理powerlinux
  17. (四)MySQL学习笔记——多表设计、多表查询、多表查询练习题
  18. Firebase 教程: iOS A/B 测试
  19. MySQL 一条语句实现若记录存在则更新,不存在则插入
  20. 一个简单的网页计算器-php网站建设代码段分享

热门文章

  1. 【转】移动机器人控制软件的设计与实现
  2. 2023秋招—大数据开发面经—卓望数码
  3. win7 64位纯净版安装教程
  4. SendMessage跨线程和跨进程
  5. vi与vim编辑器区别
  6. 计算机的假桌面,原来大神的电脑桌面是这样子的!网友:感觉自己用了25年的假电脑...
  7. RD Client 远程控制(手机做主控端)的方法
  8. 求职者必备!优质简历Word模板来袭
  9. 树莓派4B、Python与三相四线多功能电力仪表通过RS485(modbus RTU协议)收发数据
  10. AES加密算法的数学基础