Elasticsearch
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博客