无法通过弹性搜索与#34进行通信的dockerized进程;没有配置的节点可用"

时间:2016-06-21 15:09:45

标签: elasticsearch docker spring-boot

我有弹簧启动应用程序,它与ElasticSearch 5.0.0 alpha 2通信。 我的应用程序成功地与弹性进行通信并执行多个查询。

当我尝试将我的应用程序停靠时,它无法与ElasticSearch通信,我收到以下错误:

所有已配置的节点均不可用:[{#transport#-1} {127.0.0.1} {127.0.0.1:9300}]

我花了很多时间在互联网上,但是当ElasticSearch停靠时,我发现了问题,但在我的情况下,客户端是docker化的,没有docker它工作正常。

我用来创建docker镜像的命令是: docker build -t my-service。

DockerFile是:

{{1}}

要执行我使用的图像: docker run --name myname -d -p 8090:8090 -t my-service

有人可以分享他/她在这个问题上的经历吗?

由于 Guy Hudara

1 个答案:

答案 0 :(得分:1)

问题是您的dockerized主机上没有弹性搜索。当您在docker容器中放置某些内容时,它也会在网络层上被隔离,localhost是docker容器的localhost,但主机本身。因此,如果您还在docker容器中使用elasticsearch,请使用容器链接和环境变量注入,或者将主网络接口的主机地址 - 环回 - 引用到您的应用程序。

选项1

假设elasticsearch公开9200尝试运行以下

$ docker run -d --name=elasticsearch elasticsearch
$ docker run -d --name=my-app --link elasticsearch:elasticsearch -p 8090:8090 my-app

然后,您可以使用env变量${ELASTICSEARCH_PORT_9200_TCP_ADDR}在应用中定义elasticsearch地址。

选项2

假设您的主机运行在192.168.1.10上,您还可以执行以下操作:

$ docker run -d -p 9200:9200 elasticsearch
$ docker run -d -p 8090:8090 my-app

请注意,easticsearch容器的名称在此处是可选的,但必须公开elasticsearch端口。在这种情况下,您必须在应用中为192.168.1.10地址配置弹性搜索主机。