Fixing Elasticsearch-head CORS errors
When testing something for a client, I recently decided to fire up elasticsearch-head to analyse the elasticsearch cluster I had running locally. Unfortunately, I repeatedly got requests failing with CORS errors.
As I was using docker-compose to setup and run the ES cluster, and I needed to modify the elasticsearch.yml
file in the container, I had to add a few lines to my docker-compose.yml
to link my custom config in the correct place:
services:
elasticsearch:
container_name: elasticsearch
image: elasticsearch:7.17.6
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ports:
- "9200:9200"
volumes:
- ./data:/usr/share/elasticsearch/data:rw
- type: bind
source: ./es-config/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
Once I had that set, I could add my custom elasticsearch.yml
in the correct place (./es-config/elasticsearch.yml
):
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization,Content-Type"
…but I Still saw the same errors when trying to access the cluster directly. Luckily, there is a proxy supplied with elasticsearch-head that fixes this. Running
» npm run proxy
> elasticsearch-head@0.0.0 proxy
> node proxy/index.js
creating proxy localhost:9200
remote: http://localhost:9200
local: http://localhost:9101
…and connecting to [http://localhost:9101](http://localhost:9101)
fixed it!
Notes
When getting the elasticsearch.yml
from the docker container, I ran:
docker exec -ti f2bf446675a2_perc-elasticsearch bash
…to get access to the container, and navigated to /usr/share/elasticsearch/config/