踩坑-Docker 搭建zookeeper集群
1,下载zookeeper镜像文件
1、搜索zookeeper镜像
docker search zookeeper
2、拉取zookeeper镜像
docker pull zookeeper
2,docker-compose安装zookeeper镜像
1,检查系统是否安装docker-compose,直接在命令行敲入docker-compose 即可,显示如下界面就是docker-compose已经安装。
如果没有安装的同学,使用pip3之类的linux工具安装,具体安装方法自行百度,这里不再细讲;
2,配置docker-compose.yml文件。
version: '3.1'
services:
zooa:
image: zookeeper
restart: always
hostname: zoo1
container_name: zooa
ports:
- 2181:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoob:
image: zookeeper
restart: always
hostname: zoo2
container_name: zoob
ports:
- 2182:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
zooc:
image: zookeeper
restart: always
hostname: zoo3
container_name: zooc
ports:
- 2183:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
3,docker-compose使用yml文件创建容器。
1、进入docker-compose.yml文件目录下
2、 执行如下命令
docker-compose up -d
显示如上内容则表明容器创建成功!
3、 执行如下命令,查看容器信息
docker-compose ps
或者
docker ps
3,docker-compose安装踩坑
1. ERROR: .UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
原因:从网上拷贝下来的文档有的不规范,不是使用utf-8编码的。
解决方式:
1,重新找其他人的模版文件
2,自己按yml规范自己手写一个
2.ERROR: yaml.parser.ParserError: while parsing a block mapping
in "./docker-compose.yml", line 3, column 5
expected <block end>, but found '<block mapping start>'
in "./docker-compose.yml", line 13, column 6
原因:模版文件不符合yml编码规范;
解决方案:熟悉yml格式规范,然后修改
3.ERROR: In file './docker-compose.yml', service must be a mapping, not a NoneType.
原因:模版文件不符合yml编码规范;
解决方案:熟悉yml格式规范,然后修改
4.ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-b8bb2c10fe30 -j RETURN: iptables: No chain/target/match by that name.
原因:linux关闭防火墙后未重启docker
解决方案:
service docker restart
5.ERROR: for _zoo2_1 Cannot create container for service zoo2: Invalid container name (_zoo2_1), only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed
原因:未指定容器名称,docker将使用默认容器名创建,名称不合法,自己手动指定
解决方案:
在yml配置文件中,每一个service上都加上容器名;
container_name: zooa