docker 部署es

原文 :https://www.cnblogs.com/BNTang/articles/13787106.html
https://www.pianshen.com/article/6328379464/

搭建docker
mkdir -p /usr/local/dockeres/data
mkdir -p /usr/local/dockeres/logs
mkdir -p /usr/local/dockeres/config

一般我们只会配置 elasticsearch.yml 和 jvm.options 两个配置文件
因此我们把两个配置文件复制到 config 目录下命令如下:

cp /usr/local/soft/elasticsearch-7.3.0/config/* /usr/local/dockeres/config
```sh
配置文件的配置方式和 Linux 的安装方式一样
配置 elasticsearch.yml 和 jvm.options
修改内容参考以下文章即可:
https://www.cnblogs.com/BNTang/articles/13785625.html
https://www.cnblogs.com/BNTang/articles/13784815.html
拉取之前先执行一下以下指令:
需要注意是在如下图的位置执行
![](https://img2020.cnblogs.com/blog/34113/202101/34113-20210113135525444-657830083.png)

```sh
chmod -R 777 dockeres
docker run -di --name=elasticsearch -p 9200:9200 -p 9300:9300 
-v /usr/local/dockeres/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 
-v /usr/local/dockeres/config/jvm.options:/usr/share/elasticsearch/config/jvm.options 
-v /usr/local/dockeres/data:/usr/local/dockeres/data 
-v /usr/local/dockeres/logs:/usr/local/dockeres/logs 
-v /usr/local/dockeres/plugins/:/usr/share/elasticsearch/plugins/ 
elasticsearch:7.3.0

Head 插件界面不好看我这里给你们介绍一下另外的
elasticsearch-head 的 UI 风格在现在看来实在不敢恭维,因此这里推荐另外两款可视化工具,首先 ElasticHD

docker run -p 9800:9800 -di --name=elasticHD --link elasticsearch:es containerize/elastichd

这里的 --link 是用来连接两个容器,使之可以互相通信
:es 是为连接容器起的别名
Dejavu 是另一款可视化工具,UI 界面更符合当下主流的前端风格,使用起来也很方便

docker run -p 1358:1358 -d appbaseio/dejavu
Docker下部署ElasticSearch以及ES-Head

一.ElasticSearch部署
1.1 拉取镜像

es默认是没有latest版本的,这里需要指定一个版本号6.3.2,当然也可以用docker search elasticsearch查找可用的版本

 docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2

1.2 运行容器

ElasticSearch的默认端口是9200,我们把宿主环境9200端口映射到Docker容器中的9200端口,就可以访问到Docker容器中的ElasticSearch服务了,同时我们把这个容器命名为es。

docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2

1.3 添加跨域配置

1.3.1 修改docker的应用配置,首先要进入到运行应用的终端

docker exec -it es /bin/bash

1.3.2 然后找到elasticsearch.yml配置文件

显示文件

ls
结果如下:
LICENSE.txt README.textile config lib modules
NOTICE.txt bin data logs plugins

进入配置文件夹

cd config

显示文件

ls

结果如下:
elasticsearch.keystore ingest-geoip log4j2.properties roles.yml users_roles
elasticsearch.yml jvm.options role_mapping.yml users

修改配置文件

vi elasticsearch.yml

vi修改文件,在最后一行后添加跨域配置

加入跨域配置

http.cors.enabled: true
http.cors.allow-origin: "*"

四. 重启容器

docker restart es

二.ElasticSearch-Head部署
2.1 拉取镜像

docker pull mobz/elasticsearch-head:5

2.2 运行容器

docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5

好了,顺利连接的话,可以看到如图所示内容:

当然也有很多小伙伴在安装的时候会出现一些问题,我也将常见的问题列在下面。

2.3.常见问题

2.3.1 跨域报错

常见的跨域问题如上所示,缺少跨域配置,参考上文ElasticSearch部署的1.3

2.3.2 Content-Type header请求头错误

{ error:"Content-Type header [application/x-www-form-urlencoded] is not supported",status:406 }

数据浏览看不到任何数据,且查看数据请求报错,错误情况如下:

解决方法:(参考博文:https://blog.csdn.net/A_Story_Donkey/article/details/84135475)

docker exec -it es_admin /bin/bash进入es_head插件安装目录终端

编辑/usr/src/app/_site/vendor.js(我的es_Head插件部署在docker容器中,路径作为参考)
修改共有两处:

  1. 6886行 /contentType: "application/x-www-form-urlencoded
    改成 contentType: "application/json;charset=UTF-8"
  2. 7574行 var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
    改成 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
原文地址:https://www.cnblogs.com/wang2650/p/14271657.html