【问题标题】:Cannot index data using java code when started solr cloud using docker-compose使用 docker-compose 启动 solr cloud 时无法使用 java 代码索引数据
【发布时间】:2017-02-22 10:04:07
【问题描述】:

当使用zookeeperURI(暴露端口2181)从java代码中点击solr-cloud(暴露端口为8983)时,使用docker-compose启动并抛出错误说 “org.apache.solr.client.solrj.SolrServerException:没有可用的实时 SolrServers 可用于处理此请求:[http://172.21.0.4:8983/solr/test]”。

有没有办法解决这个问题?

【问题讨论】:

  • 你应该发布你的 docker-compose 文件

标签: java docker-compose apache-zookeeper solrj solrcloud


【解决方案1】:

在启动 Solr 时使用参数 -u your-hostname 终于对我有用。通过这样做,我让动物园管理员返回 your-hostname 而不是 IP。然后你可以添加:

127.0.0.1 your-hostname

到您的/etc/hosts,这应该会产生魔力。正如我所说,它对我有用。

我的docker-compose.xml 很简单:

version: '2'

services:

  ...

  oesp-zookeeper:
    image: zookeeper:1
    container_name: my-zookeeper
    ports:
      - 2181:2181

  oesp-solr:
    image: solr:1
    container_name: my-solr
    depends_on:
      - my-zookeeper
    ports:
      - 8983:8983

然后我开始 Solr:

solr -f -z my-zookeeper:2181 -h solr.docker

【讨论】:

    【解决方案2】:

    返回给 SolrJ 的 ip 地址(172.21.0.4)是外部无法访问的 SolrCloud 容器的 ip。

    为了解决这个问题,我建议为 Solr 实例指定一个主机名,而不是默认的 IP 地址。这意味着您必须在 docker-compose.yml 中定义 SOLR_HOST: solr-cloud 环境变量。

    看看这个https://github.com/freedev/solrcloud-zookeeper-docker

    特别是文件solrcloud/docker-compose.yml 的配置如我在回答的前几行中所述。

    【讨论】:

    • 我试过这种方法,但没有奏效。尝试从我的 Java 代码中搜索时出现异常:org.apache.solr.common.SolrException: Could not find a healthy node to handle the request. 如果我没有设置 SOLR_HOST 变量,我遇到的问题与原始问题相同。任何的想法? 1. 我的 Java 应用程序要求 Zookeper 提供 Solr 代码。 2. Zookeeper 返回 Solr Docker 容器 IP 3. 我的 Java 应用程序尝试访问此 IP,但失败(因为 Docker 不允许)
    • 如前所述,您应该发布您的 docker-compose 文件。另一种方法是使用不需要任何 Zookeeper 连接的SolrJ HTTP Client
    • 使用 Solr 参数 -u 为我工作(可能与您使用 SOLR_HOST 建议的相同?)。无论如何,我已经在答案中添加了详细信息。
    猜你喜欢
    • 1970-01-01
    • 2018-08-20
    • 2018-03-09
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    相关资源
    最近更新 更多