Django + ElasticSearch + Docker - 无论我使用啥主机名,连接超时
Posted
技术标签:
【中文标题】Django + ElasticSearch + Docker - 无论我使用啥主机名,连接超时【英文标题】: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.0docker-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 中?我试试,谢谢
【参考方案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。
【讨论】:
以上是关于Django + ElasticSearch + Docker - 无论我使用啥主机名,连接超时的主要内容,如果未能解决你的问题,请参考以下文章
Django + Elasticsearch——搜索精彩的TED演讲
Django + ElasticSearch + Docker - 无论我使用啥主机名,连接超时
第15篇-使用Django进行ElasticSearch的简单方法
django使用haystack来调用Elasticsearch搜索引擎