所以这是我的设置:

  • 在Docker容器中运行的.NET最小API
  • 在 docker 集装箱中运行的 keys 斗篷

在Minimal-Api的开发环境中,我可以对Keyloack容器发出http请求以获取AccessToken

在Docker Container中运行我的API后,请求不再起作用. 发出请求后,我收到错误:

"地址不可用(localhost:8080)"

以下是我在API中处理请求的方式:

这是为最小Api构建Image的Dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:7.0-alpine AS build-env
WORKDIR /app

COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/aspnet:7.0-alpine
WORKDIR /app
COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "projectName.dll"]

推荐答案

localhost:

在计算机网络中,本地主机是指用于访问它的当前计算机的主机名.名称Localhost保留用于环回目的.

当您将运行您的应用程序在对接容器localhost将意味着容器本身,而不是主机,而且您的容器显然没有安装对接程序.如果你在Windows上运行,那么你可以使用host.docker.internal来访问容器外部,即host.docker.internal:8080(可能其他系统也支持它,但现在不能验证).如果这真的奏效了,你可以试着熟悉docker networking(和this)并充分利用它.

备注,另请参阅:

  1. 从.NET 8 the default ASP.NET Core port configured in .NET container images has been updated from port 80 to 8080.开始,所以如果您要升级,则需要相应地操作
  2. docker-compose refused connection to other container in same network
  3. 为测试设置本地基础设施的常见方法是使用Docker Compose,例如How to connect an ASP.NET backend to a postgres database inside a docker container

Csharp相关问答推荐

利用.NET 8中的AddStandardResilienceDeliveries和AddStandardHedgingDeliveries实现Resiliency

react 式扩展连接中的非交叉LeftDurationTimeout

有没有一种方法可以防止在编译时在MicrosoftC或非单线程上下文中调用方法?

C#自定义字典与JSON(de—)serialize

解析需要HttpClient和字符串的服务

读取配置文件(mytest. exe. config)

当通过Google的Gmail Api发送邮件时,签名会产生dkim = neutral(正文散列未验证)'

在具有主构造函数的类中初始化属性时出现警告

如何在不考虑年份的情况下判断日期时间是否在某个日期范围内?

使用Orleans进行的单元测试找不到接口的实现

System.Net.Http.HttpClient.SendAsync(request)在docker容器内的POST方法30秒后停止

如何在ASP.NET Core8中启用REST应用程序的序列化?

如何将DotNet Watch与发布配置和传递给应用程序的参数一起使用?

如何将MemberInitExpression添加到绑定中其他Lambda MemberInitExpression

C#动态设置ServerReport报表参数

使用switch 类型模式时出现奇怪的编译器行为

工厂类是如何在.NET 8中注册的?

WPF:如何从DatagridHeader的内容模板绑定到词典项

C#定时器回调对象上下文?

如何在Cake脚本中设置MSBuild.exe的绝对路径