使用Docker安装和部署Elasticsearch出现问题以及解决方案

🎈1 参考文档

docker安装elasticsearch(最详细版)| Bright1668-CSDN

es在Windows环境启动报错 | 你道本部院是个书生-CSDN

🚀2 安装和部署Elasticsearch

2.1 设置max_map_count

  1. 查看max_map_count的值 默认是65530

    bash 复制代码
    cat /proc/sys/vm/max_map_count
  2. 重新设置max_map_count的值。

    bash 复制代码
    sysctl -w vm.max_map_count=262144

2.2 拉取镜像

bash 复制代码
docker pull elasticsearch::8.0.1

2.3 创建容器

bash 复制代码
docker run --name es -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e xpack.security.enabled=false \
-d elasticsearch:8.0.1
  • --name es:设置容器的名称为"es"。
  • -p 9200:9200 -p 9300:9300:这部分将主机的端口与容器的端口进行映射。
  • -e "discovery.type=single-node":通过设置此环境变量,将Elasticsearch配置为单节点模式。
  • -e ES_JAVA_OPTS="-Xms512m -Xmx512m":这部分设置了Elasticsearch的Java虚拟机(JVM)选项。具体来说,设置了初始堆大小(Xms)为512MB和最大堆大小(Xmx)为512MB。
  • -e xpack.security.enabled=false:此部分设置了Elasticsearch的安全性选项。通过将xpack.security.enabled设置为false,禁用了Elasticsearch的安全特性。在实际生产环境中,通常会启用安全性来保护Elasticsearch集群。
  • -d:此选项告诉Docker在后台运行容器,即以守护进程模式运行容器。
  • elasticsearch:8.0.1:最后部分指定了要运行的Docker镜像的名称和版本。

2.4 访问Elasticsearch

在浏览器中导航到http://your_server_ip:9200,访问Elasticsearch信息页面。

🚀3 安装Elasticsearch Head

3.1 拉取镜像和创建容器

bash 复制代码
# 拉取镜像
docker pull mobz/elasticsearch-head:5

# 创建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5

# 启动容器
docker start elasticsearch-head

3.2 访问Elasticsearch Head

在浏览器中导航到http://your_server_ip:9100,访问Elasticsearch Head管理页面。

🚩 4 出现的问题

4.1 尝试连接Easticsearch会出现无法访问此网站

  1. 由于是前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置。

  2. 解决办法:修改docker中elasticsearch的elasticsearch.yml文件。

    bash 复制代码
    docker exec -it elasticsearch /bin/bash (进不去使用容器id进入)
    
    vi config/elasticsearch.yml
  3. 在最下面添加2行。

    bash 复制代码
    http.cors.enabled: true 
    http.cors.allow-origin: "*"
  4. 退出并重启服务

    bash 复制代码
    exit
    docker restart elasticsearch-head

4.2 进行跨域修改之后还是无法访问

  1. 查看日志。

    bash 复制代码
    docker logs -f es
  2. 因为ES默认会去官网下载最新的GEO信息,公司内网server一般和外网不通或者网速慢,所以会报错。

    bash 复制代码
    {"@timestamp":"2023-09-03T03:24:59.123Z", "log.level":"ERROR", "message":"exception during geoip databases update", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"elasticsearch[29b38b4a9a99][generic][T#4]","log.logger":"org.elasticsearch.ingest.geoip.GeoIpDownloader","elasticsearch.cluster.uuid":"1tSrvzuJQfaJmy8qyEmwnQ","elasticsearch.node.id":"EzRz2RjkQLC112uJ_BYZUg","elasticsearch.node.name":"29b38b4a9a99","elasticsearch.cluster.name":"docker-cluster","error.type":"java.net.UnknownHostException","error.message":"geoip.elastic.co","error.stack_trace":"java.net.UnknownHostException: geoip.elastic.co\n\tat java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:567)\n\tat 
    ...
  3. 仍需要编辑config/elasticsearch.yml,在末尾添加。

    bash 复制代码
    ingest.geoip.downloader.enabled: false

4.3 Elasticsearch-head操作时不修改配置,默认会报406错误码

  1. 修改配置。

    bash 复制代码
    #复制vendor.js到外部
    docker cp elasticsearch-head:/usr/src/app/_site/vendor.js /usr/local/
    
    #修改vendor.js
    vim /usr/src/app/_site/vendor.js
  2. 编辑vendor.js。

    • 6886行:contentType:"application/x-www-form-urlencoded" 改成contentType:"application/json;charset=UTF-8"
    • 7574行:var inspectData = s.contentType === "application/x-www-form-urlencoded"&& 改成var inspectData = s.contentType === contentType:"application/json;charset=UTF-8&&"
  3. 修改完成在复制回容器。

    bash 复制代码
    docker cp /usr/local/vendor.js  elasticsearch-head:/usr/src/app/_site
  4. 重启elasticsearch-head。

    bash 复制代码
    docker restart elasticsearch-head
相关推荐
叫我龙翔几秒前
【项目日记】仿mudou的高并发服务器 --- 实现缓冲区模块,通用类型Any模块,套接字模块
linux·运维·服务器·网络·c++
不撸先疯。37 分钟前
docker镜像源配置、换源、dockerhub国内镜像最新可用加速源(仓库)
运维·docker·容器·dockerhub
荼靡6031 小时前
shell(三)
linux·服务器·数据库
zym大哥大1 小时前
Linux的权限
linux·服务器
Stark-C1 小时前
功能齐全,支持协作 | Docker部署一款支持多人共享的私密浏览器『n.eko』
运维·docker·容器
gma9991 小时前
【BUG】ES使用过程中问题解决汇总
大数据·elasticsearch·搜索引擎
伴野星辰1 小时前
小乌龟TortoiseGit 安装和语言包选择
linux·运维·服务器
枫叶丹42 小时前
【在Linux世界中追寻伟大的One Piece】多线程(一)
java·linux·运维
残念ing2 小时前
【Linux】—简单实现一个shell(myshell)
linux·运维·服务器
明月心9522 小时前
linux mount nfs开机自动挂载远程目录
linux·运维·服务器