启动一个有 nat 映射端口的容器时,iptables 报 No chain/target/match by that name
1
2
|
docker run-d-p2181:2181-p2888:2888-p3888:3888garland/zookeeper
Error response from daemon:Cannot start container565c06efde6cd4411e2596ef3d726817c58dd777bc5fd13762e0c34d86076b9e:iptables failed:iptables--wait-tnat-ADOCKER-ptcp-d0/0--dport3888-jDNAT--to-destination192.168.42.11:3888!-idocker0:iptables:No chain/target/match by that name
|
找了N多网站和官方issue后,还是没找到真正的解决方法,网上到处转载的只是分析了原因,并没有明确的解决方案,为此与同事通宵加班终于解决了这个问题。
找到系统的/etc/sysconfig/iptables
,如果没有用以下命令保存一下,然后查看里边的内容
1
2
|
iptables-save>/etc/sysconfig/iptables
cat/etc/sysconfig/iptables
|
发现内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
*filter
:INPUT ACCEPT[0:0]
:FORWARD ACCEPT[0:0]
:OUTPUT ACCEPT[0:0]
-Nwhitelist
-Awhitelist-s192.168.42.0/24-jACCEPT
#syn
-Nsyn-flood
-AINPUT-ptcp--syn-jsyn-flood
-Isyn-flood-ptcp-mlimit--limit3/s--limit-burst6-jRETURN
-Asyn-flood-jREJECT
#DOS
-AINPUT-ieth0-ptcp--syn-mconnlimit--connlimit-above15-jDROP
-AINPUT-ptcp-mstate--state ESTABLISHED,RELATED-jACCEPT
## 省略一些简单的防火墙规则
|
查看启动容器的报错信息发现-A DOCKER
DOCKER链,但在iptables文件里并没有找到,
由于之前在自己的系统(archlinux)学习使用docker时并没遇到这问题,
所以马上去看了下自己系统里的iptables的文件,
内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
*nat
:PREROUTING ACCEPT[27:11935]
:INPUT ACCEPT[0:0]
:OUTPUT ACCEPT[598:57368]
:POSTROUTING ACCEPT[591:57092]
:DOCKER-[0:0]
-APREROUTING-maddrtype--dst-typeLOCAL-jDOCKER
-AOUTPUT!-d127.0.0.0/8-maddrtype--dst-typeLOCAL-jDOCKER
-APOSTROUTING-s172.17.0.0/16!-odocker0-jMASQUERADE
-APOSTROUTING-s172.17.0.3/32-d172.17.0.3/32-ptcp-mtcp--dport1521-jMASQUERADE
-APOSTROUTING-s172.17.0.3/32-d172.17.0.3/32-ptcp-mtcp--dport22-jMASQUERADE
-ADOCKER!-idocker0-ptcp-mtcp--dport49161-jDNAT--to-destination172.17.0.3:1521
-ADOCKER!-idocker0-ptcp-mtcp--dport49160-jDNAT--to-destination172.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]
-AFORWARD-odocker0-jDOCKER
-AFORWARD-odocker0-mconntrack--ctstate RELATED,ESTABLISHED-jACCEPT
-AFORWARD-idocker0!-odocker0-jACCEPT
-AFORWARD-idocker0-odocker0-jACCEPT
-ADOCKER-d172.17.0.3/32!-idocker0-odocker0-ptcp-mtcp--dport1521-jACCEPT
-ADOCKER-d172.17.0.3/32!-idocker0-odocker0-ptcp-mtcp--dport22-jACCEPT
COMMIT
# Completed on Sun Sep 20 17:35:31 2015
|
对比后以去掉不相关的规则,以现*nat
规则里有以下的对于docker的配置
1
2
3
4
5
6
7
8
9
|
*nat
:PREROUTING ACCEPT[27:11935]
:INPUT ACCEPT[0:0]
:OUTPUT ACCEPT[598:57368]
:POSTROUTING ACCEPT[591:57092]
:DOCKER-[0:0]
-APREROUTING-maddrtype--dst-typeLOCAL-jDOCKER
-APOSTROUTING-s172.17.0.0/16!-odocker0-jMASQUERADE
COMMIT
|
*filter
规则里对docker的配置如下
1
2
3
4
5
6
7
8
9
10
|
*filter
:INPUT ACCEPT[139291:461018923]
:FORWARD ACCEPT[0:0]
:OUTPUT ACCEPT[127386:5251162]
:DOCKER-[0:0]
-AFORWARD-odocker0-jDOCKER
-AFORWARD-odocker0-mconntrack--ctstate RELATED,ESTABLISHED-jACCEPT
-AFORWARD-idocker0!-odocker0-jACCEPT
-AFORWARD-idocker0-odocker0-jACCEPT
COMMIT
|
去掉不相关规则后的配置文件如下(可以直接用):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
*nat
:PREROUTING ACCEPT[27:11935]
:INPUT ACCEPT[0:0]
:OUTPUT ACCEPT[598:57368]
:POSTROUTING ACCEPT[591:57092]
:DOCKER-[0:0]
-APREROUTING-maddrtype--dst-typeLOCAL-jDOCKER
-AOUTPUT!-d127.0.0.0/8-maddrtype--dst-typeLOCAL-jDOCKER
-APOSTROUTING-s172.17.0.0/16!-odocker0-jMASQUERADE
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]
-AFORWARD-odocker0-jDOCKER
-AFORWARD-odocker0-mconntrack--ctstate RELATED,ESTABLISHED-jACCEPT
-AFORWARD-idocker0!-odocker0-jACCEPT
-AFORWARD-idocker0-odocker0-jACCEPT
COMMIT
# Completed on Sun Sep 20 17:35:31 2015
|
然后再加上自己服务器的过滤规则,合并后覆盖到Centos 7的 /etc/sysconfig/iptables
文件
重启iptables 服务
1
|
systemctl restart iptables.service
|
两次启动对应docker容器,
1
|
docker run-d-p2181:2181-p2888:2888-p3888:3888garland/zookeeper
|
发现容器启动成功,虽然有警告,但并不影响容器的使用
相关推荐:http://blog.csdn.net/fwj380891124/article/details/53023245
http://blog.jobbole.com/98869/
相关推荐
CentOS7 Docker防火墙的简单配置 禁用 firewalld 服务 systemctl disable firewalld systemctl stop firewalld 安装 iptables 防火墙服务 yum install iptables-services 创建 iptables 配置脚本 cat >> /usr/...
CentOS7 Docker Tar镜像,
### CentOS7下Docker桥接网络配置详解 #### 一、背景介绍 Docker作为一种流行的容器化技术,为开发者提供了轻量级、可移植的容器环境。为了更好地管理容器之间的网络通信,理解Docker在网络配置方面的机制至关重要...
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,安装了openssh、wget、vim、target,用户名:root/root
CentOS7 安装 Docker Docker 是一个流行的容器化平台,能够让开发者快速部署和运行应用程序。CentOS7 是一个流行的 Linux 发行版,本文档将介绍如何在 CentOS7 上安装 Docker。 一、卸载旧的 Docker 如果您之前...
安装步骤参考:https://blog.csdn.net/chkai123/article/details/126229727 docker离线安装 arm架构下离线安装docker docker centos7离线安装docekr 离线安装docker arm架构下安装docker arm架构centos7安装docker
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 ...
环境:centos7.7_x86_64 1、虚拟机内存要稍大些至少2G 2、es需要修改linux宿主机的一些参数 设置vm.max_map_count=262144 vim /etc/sysctl.conf vm.max_map_count=262144 不重启, 直接生效当前的命令 ...
centos7 Docker镜像
docker 24.06 centos7 离线安装包
在Linux系统,特别是CentOS上安装Docker Compose是一个重要的步骤,因为它可以帮助我们管理和运行基于Docker容器的应用程序。Docker Compose是一个工具,它允许我们通过YAML配置文件来定义和运行多容器的Docker应用...
Centos7 安装 dockercentos7 自带的 yum 源没有 docker 软件,要指定其他的源,比如阿里的源或 docker 官方的https:/
在基础镜像centos7.5的基础上,增加了vim,net-tools命令,及libnpg,gtk2系统库。
这个我亲手写的docker入门教程,适合入门者,欢迎下载。
基于CentOS的Docker多容器互连lnmp环境.org安装包+mysql+phpmyadmin)_docker-lnmp
centos7 docker镜像包
解压上传到服务器 安装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 如有不明白的欢迎随时咨询
- 下载地址:[http://mirrors.163.com/centos/7/os/x86_64/Packages/](http://mirrors.163.com/centos/7/os/x86_64/Packages/) - 已下载放置位置:`E:\6、软件\iptables` - 需要下载的文件包括: - `iptables-...
官网的docker的离线安装包,直接rpm 安装即可使用。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。