简体   繁体   English

Docker:无法连接到弹性搜索表单Spring Boot Docker映像

[英]Docker: Unable to connect to elastic search form spring boot docker image

Dockerized Spring Boot App is not able to connect to Elastic Search server running locally at default address and port. Dockerized Spring Boot App无法连接到在默认地址和端口本地运行的Elastic Search服务器。 Following exception is thrown: 引发以下异常:

2018-01-20 07:10:38.529  INFO 1 --- [           main] org.elasticsearch.client.transport       : [Gemini] failed to connect to node [{#transport#-1}{localhost}{127.0.0.1:9300}], removed from nodes list

org.elasticsearch.transport.ConnectTransportException: [][127.0.0.1:9300] connect_timeout[30s]
    at org.elasticsearch.transport.netty.NettyTransport.connectToChannelsLight(NettyTransport.java:967) ~[elasticsearch-2.4.6.jar!/:2.4.6]
    at org.elasticsearch.transport.netty.NettyTransport.connectToNode(NettyTransport.java:933) ~[elasticsearch-2.4.6.jar!/:2.4.6]
    at org.elasticsearch.transport.netty.NettyTransport.connectToNodeLight(NettyTransport.java:906) ~[elasticsearch-2.4.6.jar!/:2.4.6]
    at org.elasticsearch.transport.TransportService.connectToNodeLight(TransportService.java:267) ~[elasticsearch-2.4.6.jar!/:2.4.6]
    at org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler.doSample(TransportClientNodesService.java:390) ~[elasticsearch-2.4.6.jar!/:2.4.6]

Docker File: Docker文件:

FROM openjdk:8
ADD target/CryptoAPI-1.0.0.jar CryptoAPI.jar
EXPOSE 80
ENTRYPOINT ["java", "-jar", "CryptoAPI.jar"]

Docker command to run the image: Docker命令运行镜像:

docker run --net=host cryptoapi

If you access 127.0.0.1 within a docker container - it tries to connect to itself (in your case container with spring boot tries to access its 9300 port). 如果您在Docker容器中访问127.0.0.1它会尝试与其自身连接(在您的情况下,具有Spring Boot的容器会尝试访问其9300端口)。 The container doesn't know and shouldn't know anything about surrounding environment - that's dockers core principle. 容器对周围环境一无所知,这是码头工人的核心原则。

There are some workarounds, see this thread on docker forum . 有一些解决方法,请参阅docker论坛上的线程 But general idea is that you shouldn't try to access host machine from within a container. 但是一般的想法是,您不应该尝试从容器内访问主机。

The proper way would be to start elastic search within a container, establish docker network and communicate between the two containers by their names (domain names within the docker network). 正确的方法是在容器内开始弹性搜索,建立docker网络并通过其名称(docker网络内的域名)在两个容器之间进行通信。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM