【发布时间】:2021-12-28 13:40:23
【问题描述】:
所以我有这个我最近 dockerized 的 ASP.NET Core 应用程序。它在我的本地机器上运行良好,当我将它推送到 AWS App Runner 时它运行,除非我想进行数据库调用,然后我遇到这个异常:
ExtendedSocketException:资源暂时不可用 System.Net.Dns.GetHostEntryOrAddressesCore(字符串主机名,布尔 只是地址)
该异常与 .Net 或 C# 知识不太相关,重要的是它告诉我们什么,它表示容器内没有可用的套接字。
我对容器化和在 AWS 中托管上述容器相当陌生,之前只在 EC2 上工作过。
我的猜测是,在 AWS App Runner 中运行的容器对网络有限制,当我点击运行按钮时,Docker Desktop 运行容器的方式中不存在这些限制。
有什么方法可以让我在 AWS App Runner 中配置网络更加开放?无论是服务中的配置还是通过 Dockerfile 配置。
我的Dockerfile如下,供参考:
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore "LeadDog.Web/LeadDog.Web.csproj"
COPY . .
WORKDIR "/src/LeadDog.Web"
RUN dotnet build "LeadDog.Web.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "LeadDog.Web.csproj" -c Release -o /app/publish
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM base AS final
ENV ASPNETCORE_ENVIRONMENT=Development
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "LeadDog.Web.dll"]
编辑:
This 是我得到的最接近答案的答案,但是我对 Docker 缺乏专业知识仍然给我留下了疑问,因为我不知道是否可以从 Dockerfile 设置网络模式,或者是否可以配置AWS App Runner 中的网络模式。
提前致谢,
【问题讨论】:
-
App Runner 服务应该具有完全的出站灵活性(因为你可以调用任何你想要的东西)。您要达到的数据库端点是什么?考虑到 App Runner 还没有 VPC 连接,并且它处于开放状态。这意味着您的数据库需要(目前)可以从 Internet 访问,并且显然没有阻止访问它的防火墙安全配置。
-
可以从我的本地计算机访问数据库,我们还没有配置基于 IP 的访问,所以它是公开访问的。
-
我知道我可以使用“--network=host”构建,但由于我不知道 App Runner 是如何工作的,我不知道这是否是一个选项,每个 App Runner 实例都是它自己的吗EC2在下面?还是在 Lambda 之类的东西上运行?
-
据我所知,构建时的
--network选项仅在构建期间有效,在运行时无效。 App Runner 部署到 Fargate,应用端点通过 envoy 代理公开。但关键是所有出站流量(您需要连接到数据库的流量)都已启用(并且与您构建容器的方式无关)。
标签: amazon-web-services docker asp.net-core dockerfile amazon-ecr