Docker

Docker 环境下使用 Easysearch #

在使用 Docker 运行 Easysearch 之前,请确保已进行 系统调优并安装好 Docker 服务,且 Docker 服务正常运行。

最快方式:启动临时的 docker 容器,可以从前台查看到 admin 随机生成的初始密码

  • 注: Docker 环境一般用于临时验证,如需要长期使用请务必进行数据持久化
# 直接运行镜像使用随机密码(数据及配置未持久化)
docker run --name easysearch --ulimit memlock=-1:-1 -p 9200:9200 infinilabs/easysearch:2.0.3-2534

# 使用自定义密码,可以使用环境变量配置 (需要 1.8.2 及以后的版本才支持)
echo "EASYSEARCH_INITIAL_ADMIN_PASSWORD=$(openssl rand -hex 10)" | tee .env

# 通过从环境变量文件设置初始密码(数据及配置未持久化)
docker run --name easysearch --env-file ./.env --ulimit memlock=-1:-1 -p 9200:9200 infinilabs/easysearch:2.0.3-2534

# 使用自定义密码及命名卷 (数据持久化到命名卷)
docker run -d --name easysearch \
  --ulimit memlock=-1:-1 \
  --env-file ./.env -p 9200:9200 \
  -v easysearch-data:/app/easysearch/data \
  -v easysearch-config:/app/easysearch/config \
  -v easysearch-logs:/app/easysearch/logs \
  infinilabs/easysearch:2.0.3-2534

数据持久化到本地(数据可长期使用) #

设置自定义密码,并从宿主机挂载数据目录、配置目录及日志目录,配置 jvm 内存为 512m。

  1. 在宿主机上创建目录
# 创建数据及日志存储目录
sudo mkdir -p /data/easysearch/{data,logs}
# 根据自己的需求,设置成安全的密码
echo "EASYSEARCH_INITIAL_ADMIN_PASSWORD=$(openssl rand -hex 10)" | sudo tee /data/easysearch/.env
  1. 修改目录权限

非必须步骤,视具体操作环境而定

# 注意:需要根据 Docker 运行环境判断是否需要调整权限,如在 MacOS 上使用 OrbStack 则不需要调整权限。
# 容器内 easysearch 用户的 uid 为 602,通过调整宿主机的目录权限,确保在容器内部 easysearch 用户有权限读写挂载的数据卷
sudo chown -R 602:602 /data/easysearch
  1. 从镜像初始化 config 目录
# 将镜像中的 config 目录复制到本地目录
docker run --rm --env-file /data/easysearch/.env -v /data/easysearch:/work infinilabs/easysearch:2.0.3-2534 cp -rf /app/easysearch/config /work
  1. 后台运行容器
#后台启动容器,并指定内存大小及挂载数据、日志目录,设定好容器名称及容器主机名称
#如需调整配置文件,可以修改以下配置文件
# 1. /data/easysearch/config/easysearch.yml
# 2. /data/easysearch/config/jvm.options
# 3. /data/easysearch/config/log4j2.properties
docker run -d --restart always -p 9200:9200 \
              --ulimit memlock=-1:-1 \
              -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
              -v /data/easysearch/data:/app/easysearch/data \
              -v /data/easysearch/config:/app/easysearch/config \
              -v /data/easysearch/logs:/app/easysearch/logs \
              --name easysearch --hostname easysearch \
              infinilabs/easysearch:2.0.3-2534
  1. 升级 Easysearch 版本
# 先停止并删除正在运行的容器
docker stop easysearch && docker rm easysearch
# 再修改第 4 步中镜像的版本,重新运行命令即可

验证安装 #

# 查看容器状态
docker ps --filter name=easysearch

# 查看容器日志(首次运行时可从日志中找到 admin 随机密码)
docker logs easysearch

# 测试连接
curl -ku admin:YOUR_PASSWORD https://localhost:9200

健康检查 #

Docker 运行时可以配置健康检查,自动监测 Easysearch 是否正常运行:

docker run -d --name easysearch \
  --ulimit memlock=-1:-1 \
  --env-file ./.env -p 9200:9200 \
  -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
  --health-cmd='curl -sku admin:${EASYSEARCH_INITIAL_ADMIN_PASSWORD} https://localhost:9200/_cluster/health || exit 1' \
  --health-interval=30s \
  --health-timeout=10s \
  --health-retries=3 \
  --health-start-period=60s \
  -v easysearch-data:/app/easysearch/data \
  -v easysearch-config:/app/easysearch/config \
  -v easysearch-logs:/app/easysearch/logs \
  infinilabs/easysearch:2.0.3-2534

查看健康状态:

docker inspect --format='{{.State.Health.Status}}' easysearch

常见问题 #

vm.max_map_count 错误 #

# 临时生效
sudo sysctl -w vm.max_map_count=262144

# 永久生效
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

更多系统参数请参考 系统调优

容器启动后立即退出 #

# 查看退出原因
docker logs easysearch

# 常见原因:
# 1. 内存不足 — 调小 ES_JAVA_OPTS
# 2. 权限问题 — 调整挂载目录权限为 602:602
# 3. 端口冲突 — 更换映射端口

查看容器内文件 #

# 进入容器
docker exec -it easysearch bash

# 容器内 Easysearch 路径
ls /app/easysearch/

延伸阅读 #