Docker部署

官方文档参考:Install Elasticsearch with Docker | Elasticsearch Guide [7.5] | Elastic

使用docker-compose,参考如下

version: '3'
services:
  es01: 
    image: elasticsearch:7.17.5
    ports:
      - 0.0.0.0:9200:9200
      - 0.0.0.0:9300:9300
    environment:
      - discovery.type=single-node
      - TAKE_FILE_OWNERSHIP=true
    volumes:
      - /docker/es01/data:/usr/share/elasticsearch/data

关于无法启动问题

org.elasticsearch.bootstrap.StartupException: ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
 java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data

原因是我们所需映射的目录 用户所有者为 elasticsearch 所在组 root,而 docker 挂载到本机的目录所有者是 root 所在组 root 容器内部想写文件 or 创建文件则会权限不足,解决办法有两种:

第一种方式是将外部文件夹改为所有人都可以读写(不推荐)

chmod 777 /usr/local/es/data

第二种方式是手动赋权给容器内的 用户ID:组ID(只能是ID,宿主机可不知道容器里的用户是啥)(注意,是容器内)

chown -R 1000:0 /usr/share/elasticsearch/

更简单的方式是elasticsearch docker为我们定义了环境变量,只要TAKE_FILE_OWNERSHIP=true,则在启动的时候自动执行第二种操作

位置在容器的启动脚本中,cat /usr/local/bin/docker-entrypoint.sh

if [[ "$(id -u)" == "0" ]]; then
	  # If requested and running as root, mutate the ownership of bind-mounts
		  if [[ -n "$TAKE_FILE_OWNERSHIP" ]]; then
		    chown -R 1000:0 /usr/share/elasticsearch/{data,logs}
		  fi
	   fi

参考:(27条消息) 记一次docker-compose 部署 elasticsearch:6.6.2遇到的坑_qq_15256981的博客-CSDN博客