ES docker 单点部署

1. docker-compose.yml

yaml
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

yaml
# 集群名称,单机环境可以自定义
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

启动前先创建目录并设置权限:

bash
mkdir -p data logs
sudo chown -R 1000:1000 data logs

然后启动:

bash
docker compose up -d

验证:

bash
curl http://localhost:9200
posted @ 2026-09-13 14:39  Binky.Lee  阅读(3)  评论(0)    收藏  举报