Docker-Elasticsearch-не удалось установить новое соединение: [Errno 111] отказано в соединении',))
Я использую docker-compose для запуска python flask app и elasticsearch services на сервере Linode.
Вот моя докер-композиция.yml
version: '2'
services:
elasticsearch:
build: config/elastic/
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xms1g -Xmx1g"
networks:
- docker_lr
web:
build: .
ports:
- "8000:8000"
networks:
- docker_lr
depends_on:
- elasticsearch
networks:
docker_lr:
driver: bridge
Вот Elasticsearch Dockerfile
FROM elasticsearch:5
ENV ES_JAVA_OPTS="-Des.path.conf=/etc/elasticsearch"
CMD ["-E", "network.host=0.0.0.0", "-E", "discovery.zen.minimum_master_nodes=1"]
Вот Докер-файл для web
https://github.com/mysticmode/LibreRead/blob/master/Dockerfile
Запущены обе службы, которые я могу проверить в браузере с помощью my :8000 и: 9200
Но я не смог подключиться к elasticsearch по адресу: 9200 от мой код приложения python.
r = requests.get('http://localhost:9200/lr_index/book_info/_search', data=payload)
Он показывает эту ошибку
ConnectionError: HTTPConnectionPool(host='localhost', port=9200): Max retries exceeded with url: /lr_index/book_info/_search (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7f5b13872250>: Failed to establish a new connection: [Errno 111] Connection refused',))
Может ли кто-нибудь вести меня? Спасибо!
1 ответ:
Попробуйте вот что:
r = requests.get('http://elasticsearch:9200/lr_index/book_info/_search', data=payload)Вы запускаете код
pythonв контейнереwebПравильно?localhostссылается на интерфейс замыкания на себя того же контейнера.Используя
userdefined networks, которые реализуютDNSдля контейнеров в той же сети. Вот почему вы можете называть контейнерelasticsearchего именем.
Comments