Hey all!

I'm using localstack for a project where I consume data from kinesis, process it and put it in elasticsearch.

In the later versions of localstack 'elasticsearch' was removed and is now lazily loaded after call to es::CreateElasticsearchDomain (at least that's how I understand it from #1881, #1865, #1870).

I'm running localstack in a docker using testcontainers (which gives me dynamic port mappings etc). My processing code is running on localhost.

The problem I'm facing now is that the response from es::CreateElasticsearchDomain returns an elasticsearch endpoint like: http://[docker container id]:port.
With my set up, this gives me two issues:
1. [docker container id] host is not (I believe) reachable from localhost unless I add it to /etc/hosts or something like that. I can surely "hack" my way around this by just replacing [docker container id] with localhost.
2. It says here: https://github.com/localstack/localstack/issues/1881#issuecomment-567495056 that we should not assume that elasticsearch will run on a static port in the future. When running localstack in a docker, how would I know which port to expose then in order to reach elasticsearch from localhost?

I currently have my tests running using 1.10.7 but there I just make a dummy call to es::CreateElasticsearchDomain and hardcode elasticsearch endpoint to http://localhost:4571. (It seems like it always chooses 4571 as of now?)

Thanks
Stefan
import json
import time
import unittest
from nose.tools import assert_equal, assert_in, assert_not_in
from botocore.exceptions import ClientError
from localstack.utils.aws import aws_stack
from localstack.utils.common import short_uid, safe_requests as requests
from localstack.services.es.es_api import DEFAULT_ES_VERSION
TEST_INDEX = 'megacorp'
TEST_DOC_ID = 1
COMMON_HEADERS = {
    'content-type': 'application/json',
    'Accept-encoding': 'identity'
}
TEST_DOMAIN_NAME = 'test_es_domain_1'
TEST_ENDPOINT_URL = 'http://localhost:4571'
class ElasticsearchTest(unittest.TestCase):