amazon-web-services - 在 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 运行容器时,没有检索到数据,我只是得到一个空集合
有什么问题?
解决方案
推荐阅读
- linux - 如何将常量添加到制表符分隔的文本linux文件中的特定列
- mysql - 为什么最小 id 的附加子查询可以使结果提高 10 倍?
- stack - BigNum snd 堆栈溢出
- php - 如何在 JSON 中有一个列表和对象?
- python - 连接池 - SQLAlchemy & Flask
- assembly - 多位 nasm32 计算器给出错误结果
- tensorflow - 对于分布式 TensorFlow,每个服务器/任务是否分别读取输入数据?
- node.js - 是否可以在 Windows 上使用 Cygwin 使用 Yarn 开发 Node.js 应用程序?
- vue.js - 如何在 Vue 中操作 html 元素?
- hibernate - 使用 Kotlin 协程加载多个 JPA 实体