如何使用 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
。
我使用 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 之前,我使用
启动了 Elasticsearchdocker 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
.
我该怎么做?
我必须设置一个 alias
:
elasticsearch:
image: elasticsearch
networks:
my-network:
aliases:
- myDb
现在我可以在调用问题中显示的 getClient("myDb", 9300)
时连接到端口 9300 上的 myDb
。