elasticsearch - 如何使用Docker Compose连接到Elasticsearch

标签 elasticsearch docker-compose

我使用Java API从我的Web应用程序连接到Elasticsearch实例:

static Optional<Client> getClient(String hostName, int port) {
  return getHost(hostName).map(host -> TransportClient.builder().build()
      .addTransportAddress(new InetSocketTransportAddress(host, port))
  );
}

static Optional<InetAddress> getHost(String hostName) {
  InetAddress host = null;
  try {
    host = InetAddress.getByName(hostName);
  } catch (UnknownHostException e) {
    LOG.warn("Could not get host: {}", hostName, e);
  }
  return Optional.ofNullable(host);
}

在切换到Docker Compose之前,我使用
docker run --net=my-network --name=myDb elasticsearch

和我的网络应用程序使用
docker run --net=my-network -p 8080:4567 me/myapp

并且确实可以使用getClient("myDb", 9300)连接到数据库。

但是,既然我已切换到Docker Compose,我不知道如何连接到Elasticsearch。这是我当前的docker-compose.yml:
version: '2'

services:
  my-app:
    image: me/myapp
    ports:
      - "8080:4567"
    networks:
      - my-network

  elasticsearch:
    image: elasticsearch
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

可以理解,由于我没有在UnknownHostException中设置我的Elasticsearch实例的主机名,因此会导致生成docker-compose.yml

我怎么做?

最佳答案

我必须设置一个 alias :

  elasticsearch:
    image: elasticsearch
    networks:
      my-network:
        aliases:
          - myDb

现在,当调用问题中所示的myDb时,我可以在端口9300上连接到getClient("myDb", 9300)

关于elasticsearch - 如何使用Docker Compose连接到Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37146382/

相关文章:

docker - Go测试失败时停止docker容器服务

docker - 如何从独立容器连接到 Docker Compose 容器

mysql - Elastic Search 使用 River-jdbc 与远程 mysql 服务器同步数据

elasticsearch - 想要添加范围时如何在没有查询的情况下与elasticsearch聚合?

elasticsearch - Elastic Search 匹配短语查询 -> 输出不可预测

Docker-compose:在多个主机中部署服务

elasticsearch - 如何使用has_child过滤器排除文档

elasticsearch - ServiceNow与Elasticsearch的集成

amazon-web-services - AWS ECR,基于 ECS 的部署 : nginx: [emerg] host not found in upstream "app:9000" in/etc/nginx/conf. d/default.conf:2

Docker 组合 "--no-build was passed"