說明
由於我本機配置較低,無法開啟多台虛擬機,ES的集群需要用到不同的ip,故而只搭建單機,不做集群。
一、目錄准備
mkdir /docker/es
mkdir /docker/es/data
mkdir /docker/es/config
mkdir /docker/es/plugins
二、es配置准備
cd /docker/es
vi elasticsearch.yml
使用以下配置:
# 集群名稱
cluster.name: elasticsearch-cluster
# 節點名稱
node.name: es-node-1
# 綁定host,0.0.0.0代表當前節點的ip
network.host: 0.0.0.0
# 設置其它節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真實的ip地址(本機ip)
network.publish_host: 192.168.200.135
# 設置對外服務的http端口,默認為9200
http.port: 9200
# 設置節點間交互的tcp端口,默認是9300
transport.tcp.port: 9300
# 是否支持跨域,默認為false
http.cors.enabled: true
# 當設置允許跨域,默認為*,表示支持所有域名,如果我們只是允許某些網站能訪問,那么可以使用正則表達式。比如只允許本地地址。 /https?:\/\/localhost(:[0-9]+)?/
http.cors.allow-origin: "*"
# 表示這個節點是否可以充當主節點
node.master: true
# 是否充當數據節點
node.data: true
# 所有主從節點ip:port
#discovery.seed_hosts: ["192.168.200.135:9300"] #本地只有一個節點,無法正常啟動,先注釋
# 這個參數決定了在選主過程中需要 有多少個節點通信 預防腦裂 N/2+1
discovery.zen.minimum_master_nodes: 1
#初始化主節點
#cluster.initial_master_nodes: ["es-node-1"] #本地只有一個節點,無法正常啟動,先注釋
三、准備docker-compose.yml
vi docker-compose.yml
內容如下:
version: '3'
services:
elasticsearch:
image: elasticsearch:6.8.13
restart: always
hostname: es1
container_name: es-single
volumes:
- /docker/es/data:/usr/share/elasticsearch/data
- /docker/es/plugins:/usr/share/elasticsearch/plugins
- /docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
ports:
- '9200:9200' #java、集群通信端口
- '9300:9300' #http通信端口
privileged: true #環境變量
四、啟動容器
docker-compose up -d
五、查看
docker-compose ps
如果啟動是吧,可以使用docker container logs 容器id/es-single logs
查看啟動日志
參考:docker部署redis/mongodb/rabbitmq中的es小節
如果出現啟動日志中出現java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
,需要給data目錄設置權限 chmod 777 /docker/es/data