所以这是我的设置:

  • 在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相关问答推荐

在WPF.NET 6中使用C++/WinRT组件(但实际上是任何WinRT组件)

无法从具有一对多关系的C#类中使用Swagger创建记录

哪个nuget包含SecurityStampValidatorOptions

如何在Visual Studio代码中更改大括号模式{},用于C#语言

在发布表单时绑定包含附加(嵌套)列表的对象列表的正确语法是什么

在C#中使用类中的对象值

查找表中的模式

为什么C#认为这个非托管 struct 有一个重叠

C# CompareTo()和Compare()可以返回除-1和1以外的整数吗?

BlockingCollection T引发意外InvalidOperationException

在C#中过滤Excel文件

当我将`ConcurentDictionary`转换为`IDictionary`时,出现了奇怪的并发行为

获取混淆&Quot;模糊引用&Quot;错误

.NET Google Workspace API获取错误CS0266

使用C#12中的主构造函数进行空判断

Cmd中的&ping.end()";有时会失败,而";ping";总是有效

Xamarin Forms应用程序中登录页面的用户名和密码编辑文本之间不需要的空格

处理方法内部过滤与外部过滤

单位中快照的倾斜方向

将带有嵌套If-Else的Foreach循环转换为Linq表达式