관리 메뉴

솜씨좋은장씨

[Docker] flask API Docker Container에서 localhost의 Elasticsearch 연결 시 발생하는 ConnectionError 해결방법 본문

Programming/Docker

[Docker] flask API Docker Container에서 localhost의 Elasticsearch 연결 시 발생하는 ConnectionError 해결방법

솜씨좋은장씨 2020. 5. 12. 13:52
728x90
반응형

Elasticsearch가 설치된 서버와 api를 실행할 서버가 같으면서

개발한 API 에서 Elasticsearch를 연결할 때

es_client = Elasticsearch("http://localhost:9200")

위와 같이 Python과 Elasticsearh 라이브러리를 활용하여 연결하는 경우

 

Python과 Flask를 활용하여 개발한 API를 담은 이미지를 만들고 

docker run -it -d --name api_contatiner -p 5000:5000 api_image

위의 명령어를 활용하여 container로 실행한 후

http://localhost:5000/search?query=%EC%95%88%EB%85%95

 

query를 보내 호출을 하려고하면

 

app.py가 실행되면서 Elasticsearch에 연결하려고 할때

:

elasticsearch.exceptions.ConnectionError: ConnectionError(<urllib3.connection.HTTPConnection object at 0x7f1f7d8e9970>: 
Failed to establish a new connection: [Errno 111] Connection refused) caused by: 
NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7f1f7d8e9970>: 
Failed to establish a new connection: [Errno 111] Connection refused)

위와 같은 오류가 날 경우가 있습니다.

 

이 경우에는 docker 이미지를 run 하는 명령어에서 한 가지 설정을 더 입력해주면 됩니다.

docker run -it -d --name api_contatiner -p 5000:5000 --network=host api_image

--network=host 설정을 같이 입력해주고

 

아까와 같이 다시

http://localhost:5000/search?query=%EC%95%88%EB%85%95

같은 요청을 보냈을때

이번에는 제대로 Elasticsearh와 연결되어 제대로 된 결과값이 나오는 것을 확인할 수 있습니다.

 

읽어주셔서 감사합니다!

 

 

| Docker Documentation

Docker run reference Docker runs processes in isolated containers. A container is a process which runs on a host. The host may be local or remote. When an operator executes...

docs.docker.com

 

Comments