启动一个有 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 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
安装步骤参考:https://blog.csdn.net/chkai123/article/details/126229727 docker离线安装 arm架构下离线安装docker docker centos7离线安装docekr 离线安装docker arm架构下安装docker arm架构centos7安装docker
我安装的子系统是Ubuntu 1804,安装docker步骤如下: sudo apt update // 更新软件源 sudo apt install -y docker.io // 安装docker ...安装完docker并启动后,试运行查看docker本地镜像命令docker images,结果报
Centos7 安装 dockercentos7 自带的 yum 源没有 docker 软件,要指定其他的源,比如阿里的源或 docker 官方的https:/
环境:centos7.7_x86_64 1、虚拟机内存要稍大些至少2G 2、es需要修改linux宿主机的一些参数 设置vm.max_map_count=262144 vim /etc/sysctl.conf vm.max_map_count=262144 不重启, 直接生效当前的命令 ...
这个我亲手写的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 如有不明白的欢迎随时咨询
Docker 安装docker-compose 使用二进制包进行安装 在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。 例如,在 Linux 64 位系统上直接下载对应的二进制包。 curl -L ...
官网的docker的离线安装包,直接rpm 安装即可使用。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
基于centos7的Docker(dind)映像中的Docker可以由jenkins使用 基本图像:centos7 docker18.03.0-ce 内置用户:jenkinsbuild,密码:jenkinsbuild,构建工作目录:/ home / jenkinsbuild / ci-jenkins ssh登录 ...
CentOS 7 离线安装 Docker CentOS 7 离线安装 Docker 是指在不联网的情况下,在 CentOS 7 操作系统上安装 Docker 的过程。 Docker 是一个流行的容器化平台,可以帮助开发者快速构建、测试和部署应用程序。下面是 ...
Centos离线安装iptables
centos7系统中docker离线安装包
离线环境下,在centos7.6系统上安装docker-ce-19.03,nvidia-docker2.4版本,其中docker-ce-19.03在docker-local.tar压缩文件里面,nvidia-docker2在nvidia-docker2.zip文件中。 具体安装流程如下: 1.安装docker ...
Docker 安装在 Centos7.6 上 ...7. 启动 Docker,使用命令 systemctl start docker,然后加入开机启动。 通过这些步骤,可以成功地在 Centos7.6 上安装 Docker,并可以使用 Docker 容器来部署应用程序。
CentOS下Docker 安装及使用教程,帮助Docker初学的同学们快速入门 主要内容:使用 yum 安装 Docker、镜像加速
Apollo开源地址: ...第一步 将项目clone到本地,然后在github的releases页面中下载三个zip文件 本文中重点讲解截止2019年1月最新的1.2.0版本的部署方法 第二步 ... container_name: apollo-configser