環境說明:
Centos 8.1
Docker 版本 : 19.03.8
ElasticSearch: 6.4.0
Kibana: 6.4.0
主機IP:172.16.244.140
一、鏡像下載下傳.
docker pull elasticsearch:6.4.0 #下載下傳 6.4.0版本鏡像
docker pull kibana:6.4.0 #下載下傳 kibana 6.4.0版本鏡像
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90TQPVzaEFmek1mYsplMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxAjMwEDOwkTMzEzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
運作鏡像創庫容器:
二、建構elasticsearch容器,并驗證是否成功
在建構前選設定: sysctl -w vm.max_map_count=262144 虛拟記憶體 。否則有可能啟動失敗。
mkdir -p /elk/es/data /elk/es/plugins
建立後分别授抒權限
chmod 777 /elk/es/data/
#建立相應目錄用于容器外挂
es/data : 存放es的資料檔案目錄
es/plugins : 存放es的插件安裝目錄,比如ik分詞器
docker run:
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch -e "discovery.type=single-node" -e "cluster.name=elasticsearch" -v /elk/es/plugins:/usr/share/elasticsearch/plugins -v /elk/es/data:/usr/share/elasticsearch/data -d elasticsearch:6.4.0
--name ${容器名} #指定容器名
-e | --env ${環境變量} #用來設定環境變量和指定值
single-node 表示建立單節點服務。
叢集名為 elasticsearch
-v 進行目錄挂載到縮主機。
通過curl http://localhost:9200 通路或浏覽器輸入http://ip:9200; 我的ip:172.16.244.140 主控端IP。
檢視容器(elasticsearch)IP位址,此ip位址不是固定的,随着每次容器啟動動态配置設定的。
#檢視容器IP位址
docker inspect --format='{{.NetworkSettings.IPAddress}}' elasticsearch
同樣也可以使用容器IP位址進行通路:(不能在浏覽器中通路,隻能在主控端中)
注:如果浏覽器不能通路,查下防火牆。
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
三、安裝kibana
docker run --name kibana -p 5601:5601 --link elasticsearch:es -e "elasticsearch.host=http://es:9200" -d kibana:6.4.0
--link 容器名:别名 #通過link 可以讓kibana容器通過es這個别名連接配接到elasticsearch這個容器上,進而實作通訊通路。
在浏覽中輸入http://ip:5601 進行通路。 正常情況下是可以正常通路并連接配接上es,但我這就偏偏不盡人意。好事多磨。
出現邊接失敗的情況。我們來看下日志;
docker logs -f kibana
連接配接不上elasticsearch
進入到容器中排查原因:
docker exec -it kibana bash
ping es ;可以看到ping成功,但并不能代表可以通路。使用curl http://es:9200看下情況。
可以看到産生No route to host 不能路由到主機。
懷疑hosts沒有進行域名映射?經檢視 /etc/下的hosts已經有映射了。那使用ip試試?
使用ip也不行。
後經多方找資料問題在docker0 這個橋接網卡上。
在主控端非容器中,按順序執行下面指令。(但似乎這段對docker-compose不啟作用,單獨啟服務可以,compose就不行)
nmcli connection modify docker0 connection.zone trusted
systemctl stop NetworkManager.service
firewall-cmd --permanent --zone=trusted --change-interface=docker0
systemctl start NetworkManager.service
nmcli connection modify docker0 connection.zone trusted
systemctl restart docker.service
執行上面指令前:
執行指令後:經對比少了ipv6的部份。應該不是ipv6的問題吧?
經過上面的指令後:終于可以看到了。
查通路,好像是說centos8 上面的确是有這個問題發生,需要禁用防火牆: systemctl stop firewalld.service 且重新開機docker服務
systemctl restart docker
https://stackoverflow.com/questions/59867733/kibana-couldnt-estabilish-connection-to-elasticsearch-inside-docker-compose
三、安裝IK分詞器(非必選,後面裝也行,這個是插件)
下載下傳對應版本的ik分詞器,
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.0/elasticsearch-analysis-ik-6.4.0.zip
下載下傳好之後 考到 /elk/es/plugins 下,建一個ik檔案夾。
進行解壓縮即可。
OK裝好之後,重新開機elasticsearch容器。
然後使用postman驗證下分詞器是否OK。
附:如果使用docker-compose 來啟動的。仍出現No route to Host 。則嘗試關防火牆。
systemctl stop firewalld.service #停止防火牆
systemctl restart docker #重起docker
docker-compose -f xxxx.yml up -d #重新運作容器
又或者
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=172.17.0.0/16 accept' && firewall-cmd --reload