如何使用 Docker Compose 连接到 Elasticsearch

How to connect to Elasticsearch with 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 之前,我使用

启动了 Elasticsearch
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,因为我没有在 docker-compose.yml.

中设置我的 Elasticsearch 实例的主机名

我该怎么做?

我必须设置一个 alias:

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

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