You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Elasticsearch 6+Kibana+Docker Compose连接错误排查求助

解决Docker Compose下Kibana无法连接Elasticsearch铂金版的问题

先看你贴的Kibana报错日志:

kibana | {"type":"log","@timestamp":"2018-04-24T18:27:43Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"Unable to revive connection: http://localhost:9200/"}
kibana | {"type":"log","@timestamp":"2018-04-24T18:27:43Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"No living connections"}

我之前部署Elasticsearch铂金版+Kibana+Docker Compose时也踩过几乎一模一样的坑,给你整理几个核心排查和解决方向:

1. 修正容器间的网络访问地址

在Docker Compose的私有网络里,容器内的localhost指向容器自身,不是宿主机也不是Elasticsearch容器。这是最常见的错误——你配置的Kibana连接地址用了http://localhost:9200/,自然连不到ES容器。

正确的做法是用ES服务在docker-compose.yml里的服务名作为地址,比如你给ES起的服务名是elasticsearch,就把Kibana的连接地址改成http://elasticsearch:9200/

举个Kibana的配置片段:

services:
  kibana:
    image: docker.elastic.co/kibana/kibana-oss:6.8.23 # 要对应ES6的版本
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200
      # 其他配置项...
    depends_on:
      - elasticsearch

2. 处理Elasticsearch铂金版的安全认证

铂金版默认开启了X-Pack安全功能,Kibana必须配置正确的认证信息才能建立连接:

  • 先确认你已经给ES设置了合法的用户名密码(比如默认的elastic管理员用户)
  • 在Kibana的环境变量里添加认证参数:
environment:
  - ELASTICSEARCH_URL=http://elasticsearch:9200
  - ELASTICSEARCH_USERNAME=elastic
  - ELASTICSEARCH_PASSWORD=你的ES管理员密码

如果ES同时开启了SSL/TLS,还要配置Kibana的SSL验证(测试环境可以先关闭验证,生产环境要配置CA证书):

- ELASTICSEARCH_SSL_VERIFICATIONMODE=none

3. 让Kibana等ES就绪后再启动

ES铂金版启动时要初始化安全配置,耗时比开源版久很多。如果Kibana启动太快,ES还没完全就绪,就会出现连接失败的情况。

可以给ES服务添加健康检查,让Kibana等ES进入健康状态后再启动:

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-platinum:6.8.23
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=true
      # 其他ES配置...
    healthcheck:
      test: ["CMD-SHELL", "curl -s http://localhost:9200/_cluster/health | grep -q '\"status\":\"green\"'"]
      interval: 10s
      timeout: 10s
      retries: 10
    # 其他配置...
  kibana:
    # 其他Kibana配置...
    depends_on:
      elasticsearch:
        condition: service_healthy

4. 测试容器间的网络连通性

如果上面的配置都改了还是不行,可以先进入Kibana容器,测试和ES服务的网络连通性:

docker exec -it 你的Kibana容器名 ping elasticsearch

如果ping不通,说明Docker网络配置有问题,检查是否用了自定义网络、是否有端口冲突等。

内容的提问来源于stack exchange,提问作者Guid

火山引擎 最新活动