首页 > 解决方案 > 在 aws 中访问在 docker 中运行的 elasticsearch

问题描述

我在 aws 的 docker 中运行弹性搜索服务,并且我有另一个运行 dotnet 应用程序的 docker 容器;这是我正在使用的 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 const 设置为http://elastic:9200并且它可以工作;我什至可以将其指向在 AWS 中运行的弹性服务,例如https://HOST.us-east-2.es.amazonaws.com

在这两种情况下,服务都可以正常工作,并且搜索中的数据正在返回

但是当我从 aws 运行容器时,没有检索到数据,我只是得到一个空集合

有什么问题?

标签: amazon-web-servicesdockerelasticsearchnest

解决方案


推荐阅读