1. 程式人生 > 其它 >Docker安裝ElasticSearch

Docker安裝ElasticSearch

技術標籤:javajavadocker

拉取映象

這裡一定要確保elasticsearch和kibana的版本一直,否則後面可能會出現Kibana server is not ready yet的問題

# 儲存和檢索資料
docker pull elasticsearch:7.4.2 
# 視覺化檢索資料
docker pull kibana:7.4.2  

建立例項

mkdir -p /usr/local/localVolumes/elasticsearch/config
mkdir -p /usr/local/localVolumes/elasticsearch/data
echo "http.host:0.0.0.0"
>>/usr/local/localVolumes/elasticsearch/config/elasticsearch.yml # 建立例項 docker run --name elasticsearch -p 9201:9200 -p 9301:9300 \ -e "discovery:type=single-node" \ -e ES_JAVA_OPTS="-Xms64m -Xmx256m" \ -v /usr/local/localVolumes/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /usr/local/localVolumes/elasticsearch/data:/usr/share/elasticsearch/data \ -v /usr/local/localVolumes/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.4.2

需要給與這個資料夾授予許可權,負責可能無法啟動elasticsearch

sudo chmod -R 777 /usr/local/localVolumes/*

安裝視覺化介面Kibana

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://127.0.0.1:9201 -p 5602:5601 \
       -d kibana:7.4.2

http://localhost:9201 要改為自己的對應IP地址

注意,如果直接配置成localhost:9201或者127.0.0.1:9201,kibana可能依然無法訪問,因為他應該配置容器的IP,而不是本機的IP

解決辦法:

  1. 檢視ElasticSearch 的容器內部 ip:

    docker inspect elasticsearch
    

    找到Networks下的IPAddress:

    "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "c6a4ecc8620aa0b16560232c95d66a00d838ce697c518d0e284e2798736e26c5",
                        "EndpointID": "91f1d9346871113ffa8e328bf7b7aef4e9ebc70fdfab4d3c99099dc5abc5b3ba",
                        "Gateway": "172.17.0.1",
                        "IPAddress": "172.17.0.3",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:03",
                        "DriverOpts": null
                    }
                }
    

    記住該IP,我的是172.17.0.3

  2. 進入Kibana容器

    docker exec -it kibana bash
    cd config
    vi kibana.yml
    

    修改對應的ip,將"http://elasticsearch:9200" 中的 elasticsearch 替換成第一步的ip就好了。

  3. 修改完成後退出容器,再重啟容器就好了

    docker stop kibana
    docker restart kibana
    

    再次訪問localhost:5602, 正常了

    那麼修改後的啟動命令應該是:

    docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200 -p 5602:5601 \
           -d kibana:7.4.2
    

如果按照以上的仍然無法訪問,可以繼續往下看

ElsaticSearch快取的問題

進入Kibana容器中,

docker exec -it kibana /bin/bash
bash-4.2$ ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=1.69 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.102 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.098 ms
64 bytes from 172.17.0.3: icmp_seq=4 ttl=64 time=0.127 ms
^C
--- 172.17.0.3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3067ms
rtt min/avg/max/mdev = 0.098/0.506/1.698/0.688 ms
bash-4.2$ curl http://172.17.0.3:9200
{
  "name" : "be6174278743",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "7kjQgB_ZRx-HLcPZ3WtiBg",
  "version" : {
    "number" : "7.4.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
    "build_date" : "2019-10-28T20:40:44.881551Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

從上面的日誌可以看出,容器間的訪問也是正常的,頭大,都沒問題,後來無意中看到了部落格提到快取,試了試果然可行,操作步驟如下:

1. 停止kibana

docker stop kibana

2. 刪除kibana索引

curl -XDELETE http://localhost:9201/.kibana*

3. 啟動kibana

docker start kibana

​ 好了,稍等片刻,大概一分鐘後吧,試試,果然可以正常訪問了

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-BMEZtpPL-1609303353869)(/Users/sangkuofeng/Documents/MarkDown文件庫/staticDocs/# Docker安裝ElasticSearch.assets/image-20201227140936982.png)]