Docker 安装 ElasticSearch 及失败解决方法[Ubuntu 20.04]
1. 下载 ElasticSearch
最开始使用docker search
命令搜索后,就直接使用docker pull
命令拉取镜像,但没想到拉取失败,后来到官网看了看,原来没有标签为lasted
的镜像,所以,正确的拉取方法应该是: docker pull elasticsearch:tag
。
2. 运行 ElasticSearch
2.1 失败的启动
事先说明一下,ElasticSearch启动时默认使用2GB的内存,为了防止内存占用过大,一般都限制了它的运行内存,如下命令设置为256MB。
然后我很自信满满的运行了下面的命令,其中-d
表示后台运行,-p 9200:9200
是进行端口映射,--name ES01
是指定容器的名称,7.14.0
是版本号。9200
端口用于Web通信,9300
用于分布式下各节点间的通信。
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300
--name ES01 elasticsearch:7.14.0
然后使用docker ps -a
查询了一下运行情况,确实在运行,但是使用浏览器访问http://localhost:9200
却一直失败,重新查询运行情况,居然退出了。
2.2 查找解决方法
之后使用docker logs 容器ID或容器名称
查询容器启动的日志,一行行查找,终于找到了错误原因:
- 第一个是
vm.max_map_count
的值太低,需要重新设置。 - 第二个是配置中至少需要设置
[discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes]
中的一个。
2.2.1 设置vm.max_map_count
设置方法: sysctl -w vm.max_map_count=262144
2.2.2 配置文件
说实话,Docker是最近才学的,至于容器的配置文件放在哪个位置还真不清楚,然后在网上查询也没找到结果,但是网上的教程提供了路径,就是: /usr/share/elasticsearch/config/elasticsearch.yml
,但实际上还是找不到,后来想了想,可能需要进入容器的运行环境中才行。
于是启动容器,但是不到一分钟,容器就因为Bug没解决,无法一直运行,于是我先把命令先敲一遍,然后进入容器后直接粘贴,看看这配置文件写了啥。
- 先启动容器。
docker start ES01
ES01
是容器的名称。
- 进入容器
docker exec -it ES01 /bin/bash
- 查看配置文件信息
cat /usr/share/elasticsearch/config/elasticsearch.yml
- 搞定!原来就写了两个内容,虽然不是很懂。
cluster.name: "docker-cluster"
network.host: 0.0.0.0
知道了配置文件的内容,我就可以自定义一份配置信息,然后让容器启动时按照我的配置文件来执行就可以了,下面是我的配置信息。
cluster.name: "docker-cluster"
network.host: 0.0.0.0
node.name: node-1
cluster.initial_master_nodes: ["node-1"]
2.3 成功的启动
启动前先把之前的容器删除,反正留着也用不了。删除命令是docker rm ES01
。
这次启动容器,让它带着我自定义的配置文件来启动,启动命令有点长,不过就多了一个配置信息,还是能看懂的。
docker run -v ~/config/elasticsearch/es7140.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300
--name ES01 elasticsearch:7.14.0
其中,~/config/elasticsearch/es7140.yml
是我自定义配置信息的路径。
这次算是真正的启动了,浏览器也可以访问了,不过浏览器访问至少要等个30秒,等容器启动之后才能真正访问到。
参考资料