ES docker 单点部署
1. docker-compose.yml
version: '3.8' # Docker Compose 文件版本
services:
elasticsearch:
image: elasticsearch:8.15.2 # 使用的 Elasticsearch 镜像版本
container_name: elasticsearch # 容器名称
environment:
# 设置 JVM 内存,最小和最大都设为 512MB
# 生产环境可根据机器内存适当调大,例如 -Xms2g -Xmx2g
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
# 解除内存锁定限制,配合 elasticsearch.yml 中的 bootstrap.memory_lock: true
memlock:
soft: -1
hard: -1
volumes:
# 容器与宿主机时间同步
- /etc/localtime:/etc/localtime
# 数据目录挂载,持久化 Elasticsearch 数据
- ./data:/usr/share/elasticsearch/data
# 日志目录挂载,持久化 Elasticsearch 日志
- ./logs:/usr/share/elasticsearch/logs
# 挂载自定义主配置文件,覆盖容器内默认的 elasticsearch.yml
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
# HTTP 端口,用于 REST API 和 Kibana 等客户端访问
- 9200:9200
# 传输端口,用于集群内部节点通信,单节点也建议保留
- 9300:9300
deploy:
resources:
limits:
# 限制容器最大使用内存为 4GB
memory: 4g
reservations:
# 保证至少分配 512MB 内存
memory: 512m
restart: always # 容器退出后自动重启
2. elasticsearch.yml
# 集群名称,单机环境可以自定义
cluster.name: "docker-cluster"
# 节点名称
node.name: "node-1"
# 允许外部访问,Docker 部署必须配置
# 否则只能容器内部访问,宿主机无法通过 9200 端口连接
network.host: 0.0.0.0
# 单节点模式,跳过集群引导检查,适合本地开发测试
discovery.type: single-node
# HTTP 端口,用于 REST API 访问
http.port: 9200
# 传输端口,用于节点之间通信
transport.port: 9300
# 关闭安全认证,仅限本地开发测试环境使用
# 生产环境务必开启,并配置用户名密码和 TLS
xpack.security.enabled: false
# 关闭传输层 SSL
xpack.security.transport.ssl.enabled: false
# 关闭 HTTP 层 SSL
xpack.security.http.ssl.enabled: false
# 数据存储路径,与 docker-compose.yml 中的挂载路径对应
path.data: /usr/share/elasticsearch/data
# 日志存储路径,与 docker-compose.yml 中的挂载路径对应
path.logs: /usr/share/elasticsearch/logs
# 开启跨域访问,方便前端工具或浏览器直接访问 ES
http.cors.enabled: true
# 允许所有来源跨域访问,仅限测试环境
http.cors.allow-origin: "*"
# 锁定内存,防止 Elasticsearch 内存被交换到磁盘
# 需要配合 docker-compose.yml 中的 ulimits.memlock 使用
bootstrap.memory_lock: true
启动前先创建目录并设置权限:
mkdir -p data logs
sudo chown -R 1000:1000 data logs
然后启动:
docker compose up -d
验证:
curl http://localhost:9200

浙公网安备 33010602011771号