背景:基于阿里云服务器,在 Docker 容器中部署 ElasticSearch
1.拉取镜像
docker pull elasticsearch:6.6.0
2.准备配置文件
① 在指定路径下创建配置文件并编辑
vi /usr/local/elk/es/elasticsearch.yml
② 配置文件内容
cluster.name: es-log
http.cors.enabled: true
http.cors.allow-origin: "*"
node.name: master
node.master: true
network.host: 0.0.0.0
说明:
cluster.name:自定义集群名称。
network.host:当前es节点绑定的ip地址,默认127.0.0.1,如果需要开放对外访问这个属性必须设置。
http.cors.enabled:是否支持跨域,默认为false。
http.cors.allow-origin:当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。
3.启动镜像,挂载配置文件及数据
docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /usr/local/elk/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/elk/es/data/:/usr/share/elasticsearch/data \
--name es elasticsearch:6.6.0
说明:
9300是集群节点指点的tcp通讯端口,9200是http协议的web客户端RESTful端口
ES_JAVA_OPTS:1G的云服务器不足以支持ES,为避免内存不足,在启动的时候,通过设置 ES_JAVA_OPTS 调整内存的分配;discovery.type=single-node
表示,如果你正在使用单个节点开发,那就要添加这句话避开引导检查
------------------------------------------------- 分割 ------------------------------------------------------------------------------------
问题1:caused: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
解决:关于配置文件,本机创建好通过xftp拉到服务器,文件变成了文件夹,且yml格式文件,须严格遵守格式
问题2:Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
解决:es容器的data目录挂载到宿主机的/usr/local/elk/es/data下,宿主机的data需要开启对应的权限
chmod 777 /usr/local/elk/es/data