我有弹簧启动应用程序,它与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
答案 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
地址配置弹性搜索主机。