无法在 Windows (localhost) 上通过 Docker 访问 .Net Core 应用程序

JcM*_*y3r 4 .net c# docker .net-core asp.net-core

我创建了一个 docker 文件并公开了端口。我还设置了我的program.cs来读取这些URL +端口,但我无法访问它。

从我在 Docker 控制台中可以看到我的应用程序正在运行。我就是达不到。

我尝试过 localhost:5024 和 172.17.0.2:5024 但它就是没有命中。

在此输入图像描述

这是我的 docker 文件

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build

WORKDIR /app

EXPOSE 80
EXPOSE 5024

# copy csproj and restore as distinct layers
COPY *.sln .
COPY Api/*.csproj ./Api/

RUN dotnet restore

# copy everything else and build app
COPY Api/. ./Api/
COPY Api.Core/. ./Api.Core/

WORKDIR /app/Api
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
WORKDIR /app

COPY --from=build /app/Api/out ./
ENTRYPOINT ["dotnet", "Api.dll"]
Run Code Online (Sandbox Code Playgroud)

这是我的程序.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
                webBuilder.UseIISIntegration();
                webBuilder.UseKestrel();
                webBuilder.UseStartup<Startup>();
                webBuilder.UseUrls("http://*:5024");
            });
Run Code Online (Sandbox Code Playgroud)

我运行这些命令来让它运行

docker build -f Api/Dockerfile -t quiplogs_api .
docker run -d -p 5024:80 --name app quiplogs_api
Run Code Online (Sandbox Code Playgroud)

Zia*_*han 6

简短回答

将命令更改docker run为以下内容:

docker run -d -p 5024:5024 --name app quiplogs_api

使用 localhost:5024/api.... 访问 api.... 或更改 UseUrls 以使用端口 80,一切保持不变

长答案

在docker的世界里,有两个网络。

首先是 Docker 世界内部,所有容器都在其中运行。第二个是主机。当你编写 Docker 应用程序时,你必须非常小心你所在的网络。

-p 不适用于端口,它是发布选项。

使用此交换机,您可以在主机网络和 docker 网络之间建立链接。您的命令是说发布此容器的主机端口 5024 并将其映射到 docker 网络端口 80。但 UseUrls 实际上是将其配置为在 docker 内的端口 5024 上运行。轻微的语义差异。新命令解决了这个问题。或者您可以更改 UseUrls 以使用端口 80。