spring - 在 Docker 中将 Spring 与 Elasticsearch 连接起来
问题描述
我必须将我的 Spring 客户端与 Elasticsearch 连接,其图像已由 Elastic 在 Docker Hub 中的官方 ES 2.4.6 图像拍摄,但是当我尝试运行容器时,Docker 控制台会向我报告此错误:
[故障] 无法连接到节点 [{#transport#-1}{localhost}{127.0.0.1:9300}],已从节点列表中删除
我的 Spring 项目的application.properties是:
spring.data.elasticsearch.cluster-nodes=localhost:9300
index.v = default
server.port = 8443
docker -compose.yml是:
version: "2.2"
services:
elk:
image: cvazquezlos/elk:2.4.6
ports:
- 5000:5000
- 5601:5601
- 9200:9200
- 9300:9300
volumes:
- elk-data:/var/lib/elasticsearch
testloganalyzer:
image: cvazquezlos/testloganalyzer
ports:
- 8443:8443
volumes:
elk-data:
如果我在没有 Docker 的情况下运行后端,它会按预期工作,但是当我使用 Docker 运行后端时,会向我报告上述错误。完整的错误是:
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]
at org.elasticsearch.client.transport.TransportClientNodesService$NodeSampler.sample(TransportClientNodesService.java:336) [elasticsearch-2.4.6.jar!/:2.4.6]
at org.elasticsearch.client.transport.TransportClientNodesService$ScheduledNodeSampler.run(TransportClientNodesService.java:369) [elasticsearch-2.4.6.jar!/:2.4.6]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_151]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_151]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
Caused by: java.net.ConnectException: Connection refused: localhost/127.0.0.1:9300
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_151]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_151]
at org.jboss.netty.channel.socket.nio.NioClientBoss.connect(NioClientBoss.java:152) ~[netty-3.10.6.Final.jar!/:na]
at org.jboss.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:105) ~[netty-3.10.6.Final.jar!/:na]
at org.jboss.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:79) ~[netty-3.10.6.Final.jar!/:na]
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337) ~[netty-3.10.6.Final.jar!/:na]
at org.jboss.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42) ~[netty-3.10.6.Final.jar!/:na]
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) ~[netty-3.10.6.Final.jar!/:na]
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) ~[netty-3.10.6.Final.jar!/:na]
... 3 common frames omitted
解决方案
当 SpringBoot 服务在 docker 中工作时,它无法将 localhost 解析为 ES 的主机。在这种情况下,您还可以使用如下links
属性:
在testloganalyzer
部分添加links
选项:
testloganalyzer:
image: cvazquezlos/testloganalyzer
ports:
- 8443:8443
links:
- elk:elk
首先是服务,其次是别名。
接下来更改它的引用application.properties
:
spring.data.elasticsearch.cluster-nodes=elk:9300
推荐阅读
- prometheus - PromQL。如何添加来自不同指标的标签值
- php - 插入空数据Mysql的最佳方法是什么
- php - Laravel 多态关系同时存储数据
- c++11 - c ++随机设置种子失败
- react-router-v4 - 将 withTheme 包装的组件传递给 Route 时为什么会发出警告?
- mysql - 在配置文件中添加 lower_case_table_names=2 后,mysql 8.0 将启动
- python - 无法卸载“numpy”。它是一个 distutils 安装的项目,因此我们无法准确确定哪些文件属于
- java - git api 在 Java 上进行操作
- angular - Angular 7从组件导航到另一个
- c# - 如何在 web api swagger 的标头中将用户名作为 base 64 编码格式传递?