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

Docker化Django应用连接ElasticSearch 8.10.1时连接被拒绝

Django容器连接Elasticsearch 8.10.1失败问题

运行docker compose时出现如下连接错误:

elastic_transport.ConnectionError: Connection error caused by: ConnectionError(Connection error caused by: NewConnectionError(<urllib3.connection.HTTPSConnection object at 0x7fc59132e890>: Failed to establish a new connection: [Errno 111] Connection refused))

本地未容器化阶段,已适配对应版本依赖,成功让Django连接到Docker部署的单节点Elasticsearch集群。当时将Elasticsearch容器的SSL证书复制到Django应用根目录,配置如下:

ELASTICSEARCH_DSL = {
    'default': {
        'hosts': ['https://localhost:9200'],
        'http_auth': ('elastic', 'password'),
        'verify_certs': True,
        'ca_certs' : './http_ca.crt',
    },
}

但应用容器化后(通过docker-compose.yml部署),无法将证书传入Django容器。尝试设置'verify_certs': False跳过证书验证,仍无法建立连接。查找解决方案时发现,现有案例大多基于Elasticsearch 7.x.x版本,而我使用的是8.10.1版本。

Python依赖包

  • django==4.2.6
  • djangorestframework==3.14.0
  • django-cors-headers==4.3.0
  • elasticsearch==8.10.1
  • elasticsearch-dsl==8.9.0
  • django-elasticsearch-dsl==8.0
  • psycopg2-binary==2.9.9

docker-compose.yml

version: '3.8'

services:

  db:
    image: postgres:15.4-alpine3.18
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=backend
      - POSTGRES_PASSWORD=backend
      - POSTGRES_DB=backend_dev

  elasticsearch:
    image: elasticsearch:8.10.1
    environment:
      - discovery.type=single-node
      - ELASTIC_PASSWORD=password
    ports:
      - 9200:9200
    container_name: elasticsearch
  
  backend:
    build:
      context: ./backend
      dockerfile: dev.Dockerfile
    ports:
      - "8000:8000"
    env_file:
      - ./.env.dev
    container_name: eppa_backend
    depends_on:
      - db
      - elasticsearch

  frontend:
    build:
      context: ./frontend
      dockerfile: dev.Dockerfile
    ports:
      - "3000:80"
    volumes:
      - ./frontend:/app
      - /app/node_modules
    container_name: eppa_frontend
    depends_on:
      - backend
      
volumes:
  postgres_data:

当前settings.py配置

ELASTICSEARCH_DSL = {
    'default': {
        'hosts': ['https://localhost:9200'],
        'http_auth': ('elastic', 'password'),
        'verify_certs': False,
    },
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:13:13