Docker本地运行Elasticsearch+Elasticsearch Head

Elasticsearch配置采坑事件

记一次 本地 docker 拉去 ES 和 ES-head 镜像运行容器的坑…

1. 安装 Dokcer

安装 docker 很简单 自己去官网安装下载便是,这里不再多说。


2. 拉去对应的镜像

当你有想要拉取得应用名称,即为镜像名称你可以运行如下命令:

docker search elasticsearch 

其中 OFFICIAL 表示官方推荐的。

而 AUTOMATED 表示 自动化构建。

我们选择第一个进行拉取镜像:

docker pull elasticsearch

这个命名你可以在后面指定版本号,如果不指定默认拉取最新的版本

同理我们把另外一个镜像也顺带拉取下来:

docker pull elasticsearch-head

这个镜像的功能是一个 ES 的 UI 界面程序,能够很方便的查看你存入ES 内的数据情况。

拉取成功后 我们再看看本地是否已经存在了:

docker images // or docker image ls

恩,完美的存在。


3. 运行容器-修改容器内相应的配置文件

第一步: 运行容器

docker run -d -p 127.0.0.1:9200:9200 elasticsearch

-d 表示打印出容器ID。

-P 表示将容器的9200端口 映射到本地的 9200端口以便于浏览器可以访问。

同理我们可以把另外一个镜像运行起来:

docker run -d -p 9200:9200 elasticsearch-head

第二步:查看运行的容器

docker ps

这个命令可以查看所有正在运行着的容器:

注意:上图最后一个字段 NAME 就是下面 “进入容器” 要用到的参数!

这个时候按理来说 两个镜像容器都已经运行起来,那么我们就可以直接打开浏览器直接访问操作即可,结果失败报错了!

跨域请求失败报错如下:

Failed to load http://localhost:9200/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:9100' is therefore not allowed access.
app.js:1308 
````



### 第二步:进入容器内部

> 跨域问题存在,原来ES 默认是不允许跨域的,所以我们应该进入它的系统文件找到 配置文件进行配置。

#### 01:

    docker exec -it <names> /bin/sh
    

这里的<name> 就是上面提到的 NAME:

    docker exec -it angry_wozniak /bin/sh


#### 注意 这里其实你也可以用:

    ddocker attach angry_wozniak 或者 docker exec -it d48b21a7e439 /bin/sh

但是这个一旦退出,就是连带容器也停止。

#### 02:

找到 elasticsearch.yml 文件然后

```shell
vi elasticsearch.yml

在使用docker容器时,有可能没有安装Vi, 安装Vi:apt-get install vim,如果提示:Unable to locate package vim,则需要敲:apt-get update, 等更新完毕以后再敲命令: apt-get install vim

加入以下代码即可:

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

第三步: 重启容器

 docker restart <容器ID>

搞定!


4. 可以选择elasticsearch-hq

这么插件,界面较为友好优美,操作也较为简单明了。

docker pull elastichq/elasticsearch-hq