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
},
        }
    }
def get_install_version_for_api_version(version):
    result = ELASTICSEARCH_DEFAULT_VERSION
    if version.startswith('6.'):
        result = '6.7.0'
    elif version == '7.4':
        result = '7.4.0'
    if not result.startswith(result):
        LOG.info('Elasticsearch version %s not yet supported, defaulting to %s' % (version, result))
    return result
def start_elasticsearch_instance(version):
    
    from localstack.services.es import es_starter
    
    install_version = get_install_version_for_api_version(version)
    install.install_elasticsearch(install_version)
    t1 = es_starter.start_elasticsearch(asynchronous=True, version=install_version)
    
    time.sleep(8)
    
    check_infra(apis=[], additional_checks=[es_starter.check_elasticsearch])
    return t1
def cleanup_elasticsearch_instance(status):
    
    from localstack.services.es import es_starter
    es_starter.stop_elasticsearch()
@app.route('%s/domain' % API_PREFIX, methods=['GET'])
def list_domain_names():