In your elasticsearch.yml, you have:
network.host: localhost
That is making Elasticsearch listen just on the loopback interface: it'll only be able to connect to requests that were made to localhost
. The nodes will need to bind to a non-loopback address. See https://www.elastic.co/guide/en/elasticsearch/reference/current/network.host.html