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
相关产品推荐
相关产品推荐

