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/