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',))


Может ли кто-нибудь вести меня? Спасибо!

692   1  

1 ответ:

Попробуйте вот что:

r = requests.get('http://elasticsearch:9200/lr_index/book_info/_search', data=payload)

Вы запускаете код python в контейнере web Правильно? localhost ссылается на интерфейс замыкания на себя того же контейнера.

Используя userdefined networks, которые реализуют DNS для контейнеров в той же сети. Вот почему вы можете называть контейнер elasticsearch его именем.

Comments

    Ничего не найдено.