Docker 部署 Elasticsearch遇到问题和解决办法


Docker 部署 Elasticsearch


使用 Docker 部署 Elasticsearch 的一般步骤包括:

  1. 拉取 Elasticsearch 镜像:

    docker pull elasticsearch:8.13.2
    
  2. 直接运行(不推荐)或使用 Docker Compose(推荐):

    • Docker 运行方式(仅测试):

      docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.13.2
      
    • 使用 Docker Compose 可配置更多参数,便于管理(见后文示例)。


使用以下命令查看所有容器(包括停止的):

docker ps -a

如果容器已经停止,可使用以下命令重启:

docker start <container_id>

若想容器异常退出后自动重启,可以添加自动重启策略:

docker run --restart=always ...

Elasticsearch 容器退出可能有以下原因:

  • 容器内存不足
  • vm.max_map_count 未设置
  • 配置错误
  • Elasticsearch 进程被系统杀死

建议执行以下命令查看详细日志:

docker logs <container_id>

ERROR: Elasticsearch died while starting up, with exit code 137

退出码 137 表示 Elasticsearch 被操作系统强制终止(通常是 OOM,即内存溢出)。建议:

  • 增加容器可用内存
  • 设置 JVM 堆内存大小
  • 增加主机 swap 或释放内存

查看内存信息如下,交换分区为 0,内存基本充足

total        used        free      shared  buff/cache   available
内存:       62Gi        39Gi        22Gi       359Mi       1.3Gi        22Gi
交换:      8.0Gi       8.0Gi       0.0Ki

虽然物理内存充足,但 swap 已全部使用完,可能导致内存压力过大时系统直接杀掉进程。建议:

  • 清理系统资源

  • 增加 swap 分区容量

  • 降低 JVM 堆内存配置,如:

    ES_JAVA_OPTS: "-Xms1g -Xmx1g"
    

删除某个容器并使用 docker-compose.yml 部署 Elasticsearch?

  1. 删除容器:
docker rm elasticsearch
  1. 编写 docker-compose.yml 示例:
version: '3.8'
services:
  elasticsearch:
    image: elasticsearch:8.13.2
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
    ports:
      - "9200:9200"
    volumes:
      - esdata:/usr/share/elasticsearch/data
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 2g
volumes:
  esdata:
  1. 启动服务:
docker compose up -d

使用 nano 粘贴内容格式混乱怎么办?

回答:

YAML 对缩进很敏感,在 nano 粘贴时容易出问题。建议:

  • 使用 vimscpVSCode Remote SSH 编辑

  • 若必须使用 nano,可分段粘贴,或者:

    cat > docker-compose.yml
    # 粘贴全部内容
    # 然后按 Ctrl + D 保存退出
    

使用 scp 上传文件失败的可能原因与解决方法

scp docker-compose.yml username@your-server-ip:/home/username/

提示错误:

scp: /home/username/xxx/docker-compose.yml: Permission denied

分析与解决:

  • 目录不存在或无权限写入:

    1. 登录远程主机:

      ssh username@your-server-ip
      
    2. 创建目录并赋权限:

      mkdir -p ~/xxx
      
  • 或者直接上传到主目录:

    scp docker-compose.yml username@your-server-ip:~
    

上传后再手动移动文件:

mv ~/docker-compose.yml ~/xxx/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值