近期将原本运行在 macOS 上的 EasySearch、Console 和 Coco-server 等服务迁移至群晖 NAS 平台。在迁移过程中遇到了 EasySearch 容器无法正常启动或运行中意外终止的问题。本文记录了这些问题的具体表现及解决方案,旨在为后续类似部署提供参考。
基础部署配置
以下是官方推荐的 docker-compose 配置文件:
地址如下:
https://docs.infinilabs.com/easysearch/main/docs/getting-started/install/docker-compose/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| version: "3" services: easysearch-node1: user: "602:602" image: infinilabs/easysearch:1.11.1-2000 container_name: easysearch-node1 hostname: easysearch-node1 environment: - "ES_JAVA_OPTS=-Xms1g -Xmx1g" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - $PWD/ezs1/config:/app/easysearch/config - $PWD/ezs1/data:/app/easysearch/data - $PWD/ezs1/logs:/app/easysearch/logs ports: - 9201:9200 - 9301:9300 networks: - esnet
easysearch-node2: user: "602:602" image: infinilabs/easysearch:1.11.1-2000 container_name: easysearch-node2 hostname: easysearch-node2 environment: - "ES_JAVA_OPTS=-Xms1g -Xmx1g" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - $PWD/ezs2/config:/app/easysearch/config - $PWD/ezs2/data:/app/easysearch/data - $PWD/ezs2/logs:/app/easysearch/logs ports: - 9202:9200 - 9302:9300 networks: - esnet
console: image: infinilabs/console:1.29.1-2000 container_name: console hostname: console volumes: - $PWD/console/data:/data - $PWD/console/log:/log networks: - esnet ports: - 9000:9000 links: - easysearch-node1:es1 - easysearch-node2:es2 environment: - TZ=Asia/Shanghai
networks: esnet: driver: bridge ipam: config: - subnet: 172.24.0.0/16
|
常见问题及解决方案
问题 1:vm.max_map_count 参数不足
错误提示:
1
| [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
|
问题分析
Lucene 搜索引擎在运行过程中需要创建大量内存映射文件(mmap),而 Linux 系统默认的虚拟内存区域数量限制(65530)无法满足需求。
解决方案
临时设置(重启失效):
1
| sudo sysctl -w vm.max_map_count=262144
|
永久生效配置:
- 编辑
/etc/sysctl.conf
文件
- 添加配置项:
- 应用配置:
问题 2:Java 堆内存溢出
错误信息:
1
| java.lang.OutOfMemoryError: Java heap space
|
问题分析
容器化环境中,JVM 默认的内存分配策略往往无法正确识别可用的系统资源,导致:
- 堆内存分配不足(默认通常仅 512MB-1GB)
- 内存使用超出容器限制后被系统强制终止
解决方案
修改 docker-compose 配置,明确指定 JVM 堆内存:
1 2
| environment: - ES_JAVA_OPTS=-Xms2g -Xmx2g
|
配置建议:
- 堆内存设置为物理内存的 50%以内
- 最大堆内存不超过 32GB(避免指针压缩失效)
- 初始堆(-Xms)和最大堆(-Xmx)设为相同值,避免运行时动态调整
这次是部署过程中踩的两个坑,写出来让大家避避雷。