1. 程式人生 > 其它 >Docker 安裝 ElasticSearch 及失敗解決方法[Ubuntu 20.04]

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秒,等容器啟動之後才能真正訪問到。


參考資料