elasticsearch使用docker启动一些注意事项

本文介绍在Docker环境下部署Elasticsearch时可能遇到的文件挂载权限问题及其解决办法,并提供了必要的系统配置设置。

1. 文件挂载权限问题

在使用docker来部署elasticsearch服务时,通常需要把elasticsearch的索引数据和日志数据映射到本地进行持久化存储,但是经常会遇到权限问题:elasticsearch无法读取数据或者无法写入日志文件,主要有两种处理方法:

  • 将外部文件权限全部打开,有一定安全风险
# 将外面文件夹权限设定为全部用户可读写
chmod -R 777 /PATH/TO/ES_DATA
chmod -R 777 /PATH/TO/ES_LOG
  • 将镜像内文件与宿主机文件的用户及组id统一,因为在校验权限时通过uid和gid来验证,官方elasticsearch镜像内部为elasticsearch用户,uid和gid为1000,因此我们也将外部用户及组id修改为1000
# 将外部文件夹用户与组与镜像内部统一
chown 1000:1000 /PATH/TO/ES_DATA
chown 1000:1000 /PATH/TO/ES_DATA

2. 系统配置设置

基于docker启动elasticsearch,和在linux机器配置elasticsearch类似,同样需要做一些配置:

  • 虚拟内存配置
    elasticsearch使用mmapfs的方式来存储索引,通常系统默认的mmap数值较小,容易产生内存不足的错误,处理方法:
    • 先切换到root用户,执行vi /etc/sysctl.conf
    • 添加配置vm.max_map_count=655360
    • 执行sysctl -p使得配置生效
    • 重新启动elasticsearch配置即生效
  • 进程数配置
    elasticsearch通过线程池来执行不同操作,系统要保证elasticsearch用户至少可以创建4096个线程。
    • 切换root用户,执行vi /etc/security/limits.conf
    • 添加elasticsearch - nproc 4096
  • 打开文件句柄数设置,设定最大可以打开65536个文件句柄
    • 切换root用户,执行vi /etc/security/limits.conf
    • 添加elasticsearch - nofile 65336
    • 重启elasticsearch。
### 使用 Docker 启动 Elasticsearch 的方法 通过 Docker 启动 Elasticsearch 是一个常见的操作,以下是具体的方法和配置: #### 1. 拉取官方 Elasticsearch 镜像 首先需要从 Docker 官方仓库拉取最新的 Elasticsearch 镜像。可以使用以下命令完成: ```bash docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.0 ``` 此命令会下载指定版本的 Elasticsearch 镜像[^3]。 #### 2. 创建并运行 Elasticsearch 容器 接下来,使用 `docker run` 命令启动容器,并设置必要的环境变量和端口映射。以下是完整的命令示例: ```bash docker run -d \ --name elasticsearch \ -p 9200:9200 \ -p 9300:9300 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ docker.elastic.co/elasticsearch/elasticsearch:7.17.0 ``` - `-p 9200:9200` 和 `-p 9300:9300`:将主机的 9200 和 9300 端口映射到容器中的对应端口。 - `-e "discovery.type=single-node"`:指定单节点模式,适用于开发环境或测试用途。 - `-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"`:设置 JVM 堆内存大小为 512MB,可根据实际需求调整。 #### 3. 配置文件的挂载(可选) 如果需要自定义 Elasticsearch 的配置文件,可以通过挂载本地文件实现。例如: ```bash docker cp ./elasticsearch.yml es:/usr/share/elasticsearch/config/elasticsearch.yml ``` 此命令将本地的 `elasticsearch.yml` 文件复制到容器内的指定路径[^2]。也可以直接在 `docker run` 命令中使用 `-v` 参数挂载配置文件。 #### 4. 数据持久化(可选) 为了确保数据不会因容器重启而丢失,可以挂载本地目录作为数据存储路径。例如: ```bash docker run -d \ --name elasticsearch \ -p 9200:9200 \ -p 9300:9300 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -v /path/to/your/local/elasticsearch/data:/usr/share/elasticsearch/data \ docker.elastic.co/elasticsearch/elasticsearch:7.17.0 ``` 上述命令中的 `-v` 参数将本地目录 `/path/to/your/local/elasticsearch/data` 挂载到容器内的 `/usr/share/elasticsearch/data` 目录。 #### 5. 插件安装(可选) 如果需要安装额外的插件,例如 `elasticsearch-sql`,可以进入容器后执行安装命令。步骤如下: 1. 进入容器: ```bash docker exec -it <容器ID> /bin/bash ``` 2. 安装插件: ```bash ./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/5.6.4.0/elasticsearch-sql-5.6.4.0.zip ``` 3. 重启容器以使插件生效: ```bash docker restart <容器ID> ``` ### 注意事项 - 确保主机的资源(如 CPU 和内存)足够支持 Elasticsearch 的运行。 - 在生产环境中,建议使用更复杂的配置,例如集群模式、日志记录和监控工具[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值