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 ES01ES01是容器的名稱。
- 進入容器
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秒,等容器啟動之后才能真正訪問到。

參考資料
