You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署xpack安全版Elastic Stack时Kibana连接ES失败

问题排查:Docker Compose 部署下 Kibana 无法连接 Elasticsearch

你的配置存在3个核心问题,直接导致Kibana连接失败:

  • Kibana 7.x版本读取Elasticsearch地址的正确配置项为ELASTICSEARCH_HOSTS,且要求传入JSON数组格式值,你写的ELASTICSEARCH_URL/ELASTICSEARCH_HOST是旧版本废弃配置,Kibana未读取到自定义地址时会默认请求http://elasticsearch:9200,和你日志里的报错地址完全对应
  • 开启xpack安全认证的单节点Elasticsearch缺少集群初始化配置,启动后会卡在主节点选举流程,HTTP服务长时间无法就绪;原配置的depends_on仅等待容器启动,不会校验服务是否可用,Kibana启动时ES还没对外提供服务
  • mediatrexample.api服务仅加入mediatrexample网络,而Elasticsearch归属elk_stack网络,跨网络下配置的links规则不生效,后续Serilog写入ES也会失败;另外Redis配置了密码但启动命令未加认证参数,后续API连接Redis也会报错

修正后的Docker Compose配置

以下配置已修复所有问题,同时给所有依赖服务加了健康检查,避免服务启动顺序导致的连接异常:

version: '3.4'

networks:
    mediatrexample:
        driver: bridge
    elk_stack:
        driver: bridge

services:
    pgsql_image:
        image: postgres:latest
        container_name: postgersql_db
        restart: always
        environment:
            POSTGRES_USER: "postgres"
            POSTGRES_PASSWORD: "123456"
            POSTGRES_DB: "ecommerce"
        ports:
            - 5432:5432
        networks:
            - mediatrexample
        healthcheck:
            test: ["CMD-SHELL", "pg_isready -U postgres"]
            interval: 5s
            timeout: 5s
            retries: 5

    redis_image:
        image: 'redis:latest'
        container_name: redis_db
        restart: always
        ports:
            - '6379:6379'
        command: [ "redis-server", "--requirepass", "RRnFPZ93tjBHB9W62p" ]
        networks:
            - mediatrexample
        healthcheck:
            test: ["CMD", "redis-cli", "-a", "RRnFPZ93tjBHB9W62p", "ping"]
            interval: 5s
            timeout: 5s
            retries: 5

    elastic_image:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
        container_name: elk_elastic
        environment:
            - node.name=elastic01
            - cluster.name=es-docker-cluster
            - xpack.security.enabled=true
            - xpack.security.audit.enabled=true
            - discovery.type=single-node
            - discovery.seed_hosts=elastic_image
            - cluster.initial_master_nodes=elastic01
            - ELASTIC_PASSWORD=DkIedPPSCb
            - ES_JAVA_OPTS=-Xms512m -Xmx512m
        networks:
            - elk_stack
        ports:
            - 9200:9200
        healthcheck:
            test: ["CMD-SHELL", "curl -u elastic:DkIedPPSCb -f http://localhost:9200/_cluster/health?wait_for_status=yellow || exit 1"]
            interval: 10s
            timeout: 10s
            retries: 20
            start_period: 30s

    kibana_image:
        image: docker.elastic.co/kibana/kibana:7.5.2
        container_name: elk_kibana
        environment:
            - ELASTICSEARCH_HOSTS=["http://elastic_image:9200"]
            - ELASTICSEARCH_USERNAME=elastic
            - ELASTICSEARCH_PASSWORD=DkIedPPSCb
        networks:
            - elk_stack
        depends_on:
            elastic_image:
                condition: service_healthy
        ports:
            - 5601:5601
        healthcheck:
            test: ["CMD-SHELL", "curl -f http://localhost:5601/api/status || exit 1"]
            interval: 10s
            timeout: 10s
            retries: 20
            start_period: 30s

    mediatrexample.api:
        image: ${DOCKER_REGISTRY-}mediatrexampleapi
        container_name: mediatr_example
        depends_on:
            pgsql_image:
                condition: service_healthy
            redis_image:
                condition: service_healthy
            elastic_image:
                condition: service_healthy
            kibana_image:
                condition: service_healthy
        build:
            context: .
            dockerfile: MediatrExample.API/Dockerfile
        networks:
            - mediatrexample
            - elk_stack
        environment:
            - CONNECTIONSTRINGS__NpgSQLConnection=User ID=postgres;Password=123456;Host=pgsql_image;Port=5432;Database=ecommerce
            - Redis__Host=redis_image
            - Redis__Port=6379
            - Redis__Password=RRnFPZ93tjBHB9W62p
            - Serilog__WriteTo__0__Args__nodeUris=http://elastic:DkIedPPSCb@elastic_image:9200

部署操作步骤

  • 执行docker compose down -v清理之前残留的故障容器、无效网络
  • 替换配置后执行docker compose up -d启动所有服务
  • 等待1-2分钟让Elasticsearch完成初始化,访问http://localhost:5601输入账号elastic、密码DkIedPPSCb即可正常登录Kibana

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:24:17