`
frank1998819
  • 浏览: 758044 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

Centos 7 docker 启动容器iptables报No chain/target/match by that name(转)

 
阅读更多
原作者 http://www.lxy520.net/2015/09/24/centos-7-docker-qi-dong-bao/

启动一个有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:22
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
-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 ACCEPT
COMMIT  
# 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 MASQUERADE
COMMIT  

*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 ACCEPT
COMMIT  

去掉不相关规则后的配置文件如下(可以直接用):

*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

然后再加上自己服务器的过滤规则,合并后覆盖到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重新安装下就可以了

分享到:
评论

相关推荐

    CentOS7 Docker防火墙的简单配置教程

    CentOS7 Docker防火墙的简单配置 禁用 firewalld 服务 systemctl disable firewalld systemctl stop firewalld 安装 iptables 防火墙服务 yum install iptables-services 创建 iptables 配置脚本 cat >> /usr/...

    CentOS7 Docker Tar镜像

    CentOS7 Docker Tar镜像,

    CentOS7下Docker桥接网络配置

    ### CentOS7下Docker桥接网络配置详解 #### 一、背景介绍 Docker作为一种流行的容器化技术,为开发者提供了轻量级、可移植的容器环境。为了更好地管理容器之间的网络通信,理解Docker在网络配置方面的机制至关重要...

    CentOS7_nvidia-docker2安装.rar

    centos7 nvidia-docker2离线安装包,使用命令rpm -ivh --force *.rpm sudo systemctl restart docker sudo systemctl daemon-reload 依次执行此命令,如果 事先安装了containerd.io 则需要先进行 rpm -qa | grep ...

    CentOS6.7 Docker最小版镜像

    CentOS6.7 Docker最小版镜像 最小版的CentOS6.7,安装了openssh、wget、vim、target,用户名:root/root

    CentOS7 安装 Docker.doc

    CentOS7 安装 Docker Docker 是一个流行的容器化平台,能够让开发者快速部署和运行应用程序。CentOS7 是一个流行的 Linux 发行版,本文档将介绍如何在 CentOS7 上安装 Docker。 一、卸载旧的 Docker 如果您之前...

    arm架构centos7安装docker

    安装步骤参考:https://blog.csdn.net/chkai123/article/details/126229727 docker离线安装 arm架构下离线安装docker docker centos7离线安装docekr 离线安装docker arm架构下安装docker arm架构centos7安装docker

    centos7使用docker-compose安装es(包括IK分词器扩展)+kibana

    环境:centos7.7_x86_64 1、虚拟机内存要稍大些至少2G 2、es需要修改linux宿主机的一些参数 设置vm.max_map_count=262144 vim /etc/sysctl.conf vm.max_map_count=262144 不重启, 直接生效当前的命令 ...

    docker 24.06 centos7 离线安装包

    docker 24.06 centos7 离线安装包

    centos7 docker26.1.4本地部署安装包

    policycoreutils-2.5-34.el7.x86_64.rpm policycoreutils-python-2.5-34.el7.x86_64.rpm selinux-policy-3.13.1-268.el7_9.2.noarch.rpm selinux-policy-targeted-3.13.1-268.el7_9.2.noarch.rpm ...

    centos安装docker-compose

    在Linux系统,特别是CentOS上安装Docker Compose是一个重要的步骤,因为它可以帮助我们管理和运行基于Docker容器的应用程序。Docker Compose是一个工具,它允许我们通过YAML配置文件来定义和运行多容器的Docker应用...

    Centos7安装docker1

    Centos7 安装 dockercentos7 自带的 yum 源没有 docker 软件,要指定其他的源,比如阿里的源或 docker 官方的https:/

    centos7.5docker镜像

    在基础镜像centos7.5的基础上,增加了vim,net-tools命令,及libnpg,gtk2系统库。

    centos7 docker CE入门及安装

    这个我亲手写的docker入门教程,适合入门者,欢迎下载。

    centos7 docker、docker-compose离线安装包以及安装脚本

    解压上传到服务器 安装docker sh install.sh docker-18.03.1-ce.tgz 卸载docker sh uninstall.sh 安装docker-compose sh docker-compose.sh docker-compose-Linux-x86_64 如有不明白的欢迎随时咨询

    centos.tar docker镜像包

    centos7 docker镜像包

    Centos离线安装iptables.docx

    - 下载地址:[http://mirrors.163.com/centos/7/os/x86_64/Packages/](http://mirrors.163.com/centos/7/os/x86_64/Packages/) - 已下载放置位置:`E:\6、软件\iptables` - 需要下载的文件包括: - `iptables-...

    centos7 下的docker离线安装包

    官网的docker的离线安装包,直接rpm 安装即可使用。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

    基于CentOS的Docker多容器互连lnmp环境.org安装包+mysql+phpmyadmin

    基于CentOS的Docker多容器互连lnmp环境.org安装包+mysql+phpmyadmin)_docker-lnmp

    centos7离线安装docker

    CentOS 7 离线安装 Docker CentOS 7 离线安装 Docker 是指在不联网的情况下,在 CentOS 7 操作系统上安装 Docker 的过程。 Docker 是一个流行的容器化平台,可以帮助开发者快速构建、测试和部署应用程序。下面是 ...

Global site tag (gtag.js) - Google Analytics