Доступ кasticsearch работает в докере в AWS - PullRequest
0 голосов
/ 03 апреля 2019

Я запустил службуasticsearch в docker в aws, и у меня есть другой контейнер докера, который запускает приложение dotnet; это фрагмент файла docker-compose, который я использую

version: '3.1'

services:
  someservice:
    build:
      context: ./
      dockerfile: Dockerfile
      args:
        - AWS_ACCESS_KEY_ID
        - AWS_REGION
        - AWS_SECRET_ACCESS_KEY
        - AWS_SESSION_TOKEN
    restart: always
    container_name: some-server
    ports:
      - 8080:8080
    links:
      - elastic

  elastic:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.4.0
    environment:
      TAKE_FILE_OWNERSHIP: "true"
    volumes:
      - ./.data/elastic:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300
    ulimits:
      nofile:
        soft: "65536"
        hard: "65536"

и это отрывок из Dockerfile

FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app

WORKDIR /app

RUN mkdir /Service/

WORKDIR /app/Service/

COPY local_foler/Service/*.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY local_folder/Service/. ./

RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime

ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY

ENV AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
ENV AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID

ENV ASPNETCORE_URLS="http://0.0.0.0:8080"
EXPOSE 8080

WORKDIR /app
COPY --from=build-env /app/Service/out .
ENTRYPOINT ["dotnet", "Service.dll"]

в приложении-службе я использую NEST-клиент, что-то вроде этого

var settings = new ConnectionSettings(new Uri(ELASTIC_SERVICE_URI)).DefaultIndex("some-index").EnableDebugMode();
            var client = new ElasticClient(settings);

            var pingResponse = client.Ping();
            if (pingResponse.IsValid)
            {
                string searchTerm = "*";
                if (searchParam != null)
                {
                    searchTerm = "*" + WebUtility.UrlDecode(searchParam) + "*";
                }

                int from = (int)(fromParam == null ? 0 : fromParam);
                int size = (int)(sizeParam == null ? 10 : sizeParam);

                var searchResponse = client.Search<SomeType>(s => s
                        .From(from)
                        .Size(size)
                        .AllTypes()
                        .Query(q => q
                            .Bool(bq => bq
                                .Must(m => m
                                    .QueryString(qs => qs
                                        .Query(searchTerm)
                                        .AnalyzeWildcard(true)
                                        .DefaultField("*")
                                    )
                                )
                            )
                        )
                );



                return Ok(searchResponse.Documents);

если я запускаю Docker-контейнеры локально, я могу установить константу ELASTIC_SERVICE_URI равной http://elastic:9200, и она работает; я даже могу указать, что эластичный сервис работает в aws вот так https://HOST.us -east-2.es.amazonaws.com

в обоих случаях сервис работает нормально и данные из поиска возвращаются

но когда я запускаю контейнеры из aws, данные не извлекаются, я просто получаю пустую коллекцию

что может быть не так?

...