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 映像

Docker 上的 Spring Boot 无法连接到 MySQL

docker-compose spring boot无法连接到Postgres [重复]