學(xué)習(xí)springCloud的過程及其痛苦,一直跟著黑馬的視頻走,但是隨著技術(shù)棧的更新,許多技術(shù)的配置與黑馬視頻講的會有出入,然后就會遇到一些很頭疼的問題,有時候一個問題需要找很久的原因與解決方法,所以記錄一下這些問題防忘吧(由于是嘗試過程中解決了問題,沒有截圖,但說的還算詳細(xì))。
問題:
在學(xué)習(xí)到Elasticsearch時,我用docker安裝并啟動了Elasticsearch,前期過程挺順利的,但是在用瀏覽器訪問的時候出問題了,怎么也訪問不到,提示拒絕訪問。
解決過程:
1.防火墻問題:
網(wǎng)上大部分說的就是防火墻的問題,但是在剛學(xué)docker時,我就關(guān)閉了防火墻并且禁止了開機啟動,給有需要的提供下命令吧:
firewall-cmd --state # 查看防火墻狀態(tài)
systemctl stop firewalld.service # 停止firewall
systemctl disable firewalld.service # 禁止firewall開機啟動
reboot # 重啟虛擬機
2.max_map_count太?。?/h4>
第二種比較多的說法是:max_map_count太小了,但是我修改了之后問題依然沒有解決,命令如下:
先查看max_map_count值(一般是65530,但如果是262144就不用改):
cat /proc/sys/vm/max_map_count 65530
修改65530為262144:
#臨時修改
sysctl -w vm.max_map_count=262144
#永久修改
vm.max_map_count=262144?
3.虛擬機內(nèi)存不足以給ES分配:
還有說法是ES占用的內(nèi)存比較多,如果虛擬機內(nèi)存不足以分配給ES時會導(dǎo)致啟動失敗,解決方法:
#查看ES的容器id:
docker ps -a
#刪除ES容器:
docker rm + 容器id
#新建ES容器(重點加上-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"):
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-plugins:/usr/share/elasticsearch/plugins \
-v /path/to/data/dir:/usr/share/elasticsearch/data \
--network es-net \
--privileged \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
這個是黑馬視頻中說到過的,所以我也是加上的,對我的問題沒有幫助。
正解:掛載點目錄問題:
1.查看日志:
我在尋求方法時,偶然發(fā)現(xiàn),這個命令可以查看Elasticsearch的日志:
# 查看最新日志(默認(rèn)情況下使用-f選項)
docker logs -f +容器id或者鏡像名
# 查看特定時間段內(nèi)的日志:
docker logs --since 2022-01-01 +容器id或者鏡像名
# 僅查看錯誤日志:
docker logs --since 1d --grep ERROR +容器id或者鏡像名
然后我查看了我的日志,發(fā)現(xiàn)在我瀏覽器訪問ip:9200時,會出現(xiàn)這個錯誤并且此時我的容器會被自動刪除:
ElasticsearchException[failed to bind service]; nested: FileSystemException[/usr/share/elasticsearch/data/nodes/0: Not a directory];
Likely root cause: java.nio.file.FileSystemException: /usr/share/elasticsearch/data/nodes/0: Not a directory
2.嘗試修復(fù):
大致意思就是說我的掛載目錄不存在,但是我單獨創(chuàng)建了目錄后,還是會報錯:
uncaught exception in thread [main]
ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
然后我就針對目錄做了一系列的我能想到的方法,但是都沒解決問題。
3.正確方法:
無奈之下,我只能完全刪除了Elasticsearch的鏡像以及容器,重新安裝,但是在安裝之前先創(chuàng)建掛載點文件目錄!
下面為docker安裝Elasticsearch的完整步驟:
(1)創(chuàng)建一個網(wǎng)絡(luò),方便后期部署kibana:
docker network create es-net
(2)docker拉取Elasticsearch,不知道為什么在拉取Elasticsearch時,必須加tag,不能直接用latest:
# 必須選取一個tag,以7.12.1為例:
docker pull elasticsearch:7.12.1
(3)創(chuàng)建搭載目錄(重點?。?!很多教程都沒有)
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
# 將http.host: 0.0.0.0寫入到es配置文件中,代表能被遠(yuǎn)程的任何機器訪問:
echo "http.host: 0.0.0.0" > /mydata/elasticsearch/config/elasticsearch.yml
(4)創(chuàng)建容器:
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-plugins:/usr/share/elasticsearch/plugins \
-v /path/to/data/dir:/usr/share/elasticsearch/data \
--network es-net \
--privileged \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
解釋:
-e "cluster.name=es-docker-cluster":設(shè)置集群名稱
-e "http.host=0.0.0.0":監(jiān)聽的地址,可以外網(wǎng)訪問
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m":內(nèi)存大小
-e "discovery.type=single-node":非集群模式
-v es-data:/usr/share/elasticsearch/data:掛載邏輯卷,綁定es的數(shù)據(jù)目錄
-v es-plugins:/usr/share/elasticsearch/plugins:掛載邏輯卷,綁定es的插件目錄
--privileged:授予邏輯卷訪問權(quán)
--network es-net :加入一個名為es-net的網(wǎng)絡(luò)中
-p 9200:9200:端口映射配置
(5)瀏覽器訪問:虛擬機ip:9200,出現(xiàn)以下頁面代表訪問成功(edge瀏覽器出現(xiàn)的為json格式):
?問題解決?。?!
總結(jié):
這次的問題主要是,事前沒有準(zhǔn)備掛載點目錄,其實黑馬的視頻和很多教程也沒有這一步,所以繞了很大的彎子,花費很長時間的另一個原因是:我沒有及時的查看日志,其實程序員遇到錯誤時第一項該做的就是查看日志,而我首先是去盲目的搜索答案了,也算讓我長長記性吧。文章來源:http://www.zghlxwxcb.cn/news/detail-447593.html
日志錯誤可能和我不一樣,可以在評論區(qū)發(fā)出來,只要我知道的就會回答的,不知道的留給隨緣的大佬回答吧。文章來源地址http://www.zghlxwxcb.cn/news/detail-447593.html
到了這里,關(guān)于虛擬機中用Docker安裝并啟動了Elasticsearch,瀏覽器卻訪問不了的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!