Docker:无法连接到弹性搜索表单spring boot docker image
Posted
技术标签:
【中文标题】Docker:无法连接到弹性搜索表单spring boot docker image【英文标题】:Docker: Unable to connect to elastic search form spring boot docker image 【发布时间】:2018-06-29 10:29:05 【问题描述】:Dockerized Spring Boot App 无法连接到在默认地址和端口上本地运行的 Elastic Search 服务器。抛出以下异常:
2018-01-20 07:10:38.529 INFO 1 --- [ main] org.elasticsearch.client.transport : [Gemini] failed to connect to node [#transport#-1localhost127.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 文件:
FROM openjdk:8
ADD target/CryptoAPI-1.0.0.jar CryptoAPI.jar
EXPOSE 80
ENTRYPOINT ["java", "-jar", "CryptoAPI.jar"]
运行镜像的 Docker 命令:
docker run --net=host cryptoapi
【问题讨论】:
您的 Elasticsearch 配置是什么样的?几乎看起来你没有在 yml 中正确绑定你的主机。 那么你的 ES 是在主机上运行的吗?还是在 docker 容器上? 指向容器内的 127.0.0.1 不会指向主机上的本地主机,而是指向 sprint 容器内的本地主机。找不到 ES。 【参考方案1】:如果您在 docker 容器中访问 127.0.0.1
- 它会尝试连接到自身(在您的情况下,带有 spring boot 的容器会尝试访问其 9300 端口)。容器不知道也不应该知道周围环境的任何信息——这是 docker 的核心原则。
有一些解决方法,请参阅thread on docker forum。但一般的想法是,您不应该尝试从容器内访问主机。
正确的方法是在容器内启动弹性搜索,建立 docker 网络并通过它们的名称(docker 网络内的域名)在两个容器之间进行通信。
【讨论】:
谢谢。我能够使用桥接网络连接它们。以上是关于Docker:无法连接到弹性搜索表单spring boot docker image的主要内容,如果未能解决你的问题,请参考以下文章
如何将 fluentd 连接到 opendistro 以进行弹性搜索
如何在弹性beantalk中将PostgreSQL RDS连接到spring boot?
无法使用 docker 将 PostgreSQL 数据库连接到 Spring
无法使用 Spring Boot 应用程序连接到 Docker 映像