【问题标题】:Django + ElasticSearch + Docker - Connection Timeout no matter what hostname I useDjango + ElasticSearch + Docker - 无论我使用什么主机名,连接超时
【发布时间】:2022-01-06 06:23:51
【问题描述】:

从第一天起,我就遇到了连接 Elasticsearch 容器的问题。 首先我使用elasticsearch作为主机名,然后我尝试了容器名称web_elasticsearch_1,最后我为容器设置了一个静态IP地址并将其传递到我的配置文件中。

PYPI 包:

  • django==3.2.9
  • elasticsearch==7.15.1
  • elasticsearch-dsl==7.4.0

docker-compose.yml

version: "3.3"

services:

  web:
    build:
      context: .
      dockerfile: local/Dockerfile
    image: project32439/python
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    env_file:
      - local/python.env
    depends_on:
      - elasticsearch

  elasticsearch:
    image: elasticsearch:7.10.1
    environment:
      - xpack.security.enabled=false
      - discovery.type=single-node
    networks:
      default:
        ipv4_address: 172.18.0.10

settings.py

# Elasticsearch
ELASTICSEARCH_HOST = "172.18.0.10"
ELASTICSEARCH_PORT = 9200

service.py

from django.conf import settings
from elasticsearch import Elasticsearch, RequestsHttpConnection

es = Elasticsearch(
    hosts=[{"host": settings.ELASTICSEARCH_HOST, "port": settings.ELASTICSEARCH_PORT}],
    use_ssl=False,
    verify_certs=False,
    connection_class=RequestsHttpConnection,
)

追溯

HTTPConnectionPool(host='172.18.0.10', port=9200): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f1973ebd6d0>, 'Connection to 172.18.0.10 timed out. (connect timeout=5)'))

【问题讨论】:

  • 使用服务名作为主机应该可以elasticsearch,也许你需要暴露端口?
  • 在 docker-compose 中?我试试,谢谢

标签: django docker elasticsearch elasticsearch-dsl


【解决方案1】:

默认情况下,Docker Compose 使用桥接网络来提供容器间通信。您可以在 Debian Wiki 上阅读有关此网络的更多信息。

对你来说重要的是,默认情况下 Docker Compose 会创建一个与 docker-compose.yml 文件中的服务名称相同的主机名。所以更新你的文件:

version: "3.3"
services:

  web:
    build:
      context: .
      dockerfile: local/Dockerfile
    image: project32439/python
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    env_file:
      - local/python.env
    depends_on:
      - elasticsearch

  elasticsearch:
    image: elasticsearch:7.10.1
    environment:
      - xpack.security.enabled=false
      - discovery.type=single-node

现在您可以从您的 Web 容器连接到 elasticsearch:9200 而不是 172.18.0.10。有关更多信息,请参阅article

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    相关资源
    最近更新 更多