Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 40 additions & 14 deletions docs/modules/elasticsearch.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,53 @@ Note that it's based on the [official Docker image](https://www.elastic.co/guide

## Usage example

You can start an elasticsearch container instance from any Java application by using:
In the following examples, we will be using the following versions:

<!--codeinclude-->
[HttpClient](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:httpClientContainer7
[HttpClient with Elasticsearch 8](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:httpClientContainer8
[HttpClient with Elasticsearch 8 and SSL disabled](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:httpClientContainerNoSSL8
[TransportClient](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:transportClientContainer
[Version 9 (recommended)](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:version_9
[Version 8 (maintained)](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:version_8
[Version 7 (deprecated)](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:version_7
<!--/codeinclude-->

From Elasticsearch 8 onwards, security and HTTPS are enabled by default. You can start a container and talk to it
with the REST client as follows:

Note that if you are still using the [TransportClient](https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html)
(not recommended as it is deprecated), the default cluster name is set to `docker-cluster` so you need to change `cluster.name` setting
or set `client.transport.ignore_cluster_name` to `true`.
<!--codeinclude-->
[HttpClient](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:httpClientLatest
<!--/codeinclude-->

### Disable TLS

HTTPS can be turned off if you do not need it:

<!--codeinclude-->
[HttpClient with TLS disabled](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:httpClientTlsDisabled
<!--/codeinclude-->

### Elasticsearch 7 (deprecated)

Elasticsearch 7 listens on HTTP and does not enable security unless you opt in with `withPassword()`.

<!--codeinclude-->
[HttpClient](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:httpClientV7
[HttpClient with security enabled](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:httpClientV7Secured
<!--/codeinclude-->

The [TransportClient](https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html)
has been removed in Elasticsearch 8. It can still be used against a 7.x container. The default cluster name is
`docker-cluster`, so you need to change the `cluster.name` setting or set `client.transport.ignore_cluster_name` to `true`.

<!--codeinclude-->
[TransportClient](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:transportClientV7
<!--/codeinclude-->

## Secure your Elasticsearch cluster
### OSS distribution

The default distribution of Elasticsearch comes with the basic license which contains security feature.
You can turn on security by providing a password:
The last OSS image is `elasticsearch-oss:7.10.2`. It does not include features under the Elastic License, and
`withPassword()` is rejected:

<!--codeinclude-->
[HttpClient](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:httpClientSecuredContainer
[OSS image](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java) inside_block:ossContainer
<!--/codeinclude-->

## Kibana container
Expand All @@ -40,7 +66,7 @@ Kibana requires a connection to Elasticsearch and `KibanaContainer` supports two
In managed mode, `KibanaContainer` automatically connects to an `ElasticsearchContainer`:

<!--codeinclude-->
[Kibana with Elasticsearch](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/KibanaContainerTest.java) inside_block:managedModeCanStartAndReachElasticsearchInSameExplicitNetwork
[Kibana with Elasticsearch](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/KibanaContainerTest.java) inside_block:managedModeReachesElasticsearchOnSharedNetwork
<!--/codeinclude-->

When using managed mode with explicit networks, both containers must share the same `Network` instance.
Expand All @@ -51,7 +77,7 @@ Alternatively, you can omit the network configuration entirely, and `KibanaConta
In external mode, `KibanaContainer` connects to an external Elasticsearch instance via URL and using provided credentials:

<!--codeinclude-->
[Kibana with external Elasticsearch](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/KibanaContainerTest.java) inside_block:externalModeCanWorkWithUsernamePassword
[Kibana with external Elasticsearch](../../modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/KibanaContainerTest.java) inside_block:externalModeReachesElasticsearchWithUsernamePassword
<!--/codeinclude-->

For external mode with HTTPS, use `withElasticsearchCaCertificate()` to provide the CA certificate.
Expand Down
2 changes: 1 addition & 1 deletion modules/elasticsearch/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ description = "Testcontainers :: elasticsearch"
dependencies {
api project(':testcontainers')

testImplementation "org.elasticsearch.client:elasticsearch-rest-client:9.4.3"
testImplementation "org.elasticsearch.client:elasticsearch-rest-client:9.5.2"
testImplementation "org.elasticsearch.client:transport:7.17.29"
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@
* Supports two modes:
* <ul>
* <li><b>Managed mode:</b> Kibana automatically connects to an {@link ElasticsearchContainer}.
* See KibanaContainerTest#managedModeCanStartAndReachElasticsearchInSameExplicitNetwork()</li>
* See KibanaContainerTest#managedModeReachesElasticsearchOnSharedNetwork()</li>
* <li><b>External mode:</b> Kibana connects to an external Elasticsearch instance via URL.
* See KibanaContainerTest#externalModeCanWorkWithUsernamePassword()</li>
* See KibanaContainerTest#externalModeReachesElasticsearchWithUsernamePassword()</li>
* </ul>
* <p>
*/
Expand Down
Loading
Loading