How can I configure elasticsearch docker containers (elasticsearch:7.5.0) to use fewer resources and run in a nonproduction mode?
I want to run containers in Jenkins
You can run your docker in development mode and create a single node ES cluster by following official ES link on single node ES cluster. As mention in this link.
To start a single-node Elasticsearch cluster for development or testing, specify single-node discovery to bypass the bootstrap checks:
In-short all you need to do is add -e "discovery.type=single-node"
in your docker command, which would enable the dev mode and then you don't have to satisfy the hard limits of production environments ie it bypass bootstrap checks.
More information on your settings and how to turn it off can be found here
node.store.allow_mmap. This is a boolean setting indicating whether or not memory-mapping is allowed. The default is to allow it.
So, if -e "discovery.type=single-node
env. doesn't turn it off, then you can explicitly set it false in your elasticsearch.yml
.
If you're reading this trying to find out how to do it when using docker-compose
:
docker-compose.yml:
elasticsearch:
environment:
- discovery.type=single-node
Create elasticsearch.yml
:
discovery:
type: single-node
Mount it as a volume on your container in docker-compose.yml:
elasticsearch:
volumes:
- /path-to/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
Make sure the first part actually a path, it has to start with /
or ./
or else it's going to treat it as a named volume. The second part is the path inside the container so it can be left as is.
The file must be in a location you've enabled File Sharing for in your Docker application. Set this up in Preferences > Resources > File Sharing if you haven't.
I have also faced this issue when I was using this docker.elastic.co/elasticsearch/elasticsearch:7.6.2
elastic-search docker image for a single node cluster.
The error I was getting is:
ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
To start a single-node Elasticsearch cluster with Docker
Solution1
So the solution would be to run a docker image with an environment variable -e "discovery.type=single-node"
in docker run command.
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2
Solution2
Add this "discovery.seed_hosts : 127.0.0.1:9300"
in eleasticsearch.yml file. And build your own docker image and use it.
Dockerfile
will look like this.
FROM docker.elastic.co/elasticsearch/elasticsearch:7.6.2
RUN echo discovery.seed_hosts : 127.0.0.1:9300 >> /usr/share/elasticsearch/config/elasticsearch.yml
RUN cat /usr/share/elasticsearch/config/elasticsearch.yml
For more details click here.