代码之家  ›  专栏  ›  技术社区  ›  Brent Arias

ASP.NET Core Docker镜像部署/运行成功,但获得404

  •  0
  • Brent Arias  · 技术社区  · 1 年前

    我有一个.Net 6 ASP.Net Web API项目,内置于Windows docker映像中,并在Azure应用程序服务中运行(作为docker容器)。日志显示一切正常。然而,当我试图访问这个Azure Web应用程序的招摇过市页面(使用“默认域”)时,我得到了404。我尝试过的地址示例:

    为什么它遥不可及?

    多一点背景。。。我的应用程序成功地作为Windows docker镜像部署到docker Hub。我的Azure应用程序服务从Docker Hub获取图像。同样,Visual Studio也可以在Windows docker桌面中启动相同的docker映像。。。并允许我检查码头集装箱暴露的型锻页面。

    因此,一切看起来都“刚刚好”,但当从Azure应用程序服务提供服务时,我有404。

    这是我正在使用的dockerfile:

    #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
    
    #Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
    #For more information, please see https://aka.ms/containercompat
    
    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    FROM mcr.microsoft.com/dotnet/sdk:6.0-windowsservercore-ltsc2022 AS build
    WORKDIR /src
    COPY ["Alrium.WebAPI/Alrium.WebAPI.csproj", "Alrium.WebAPI/"]
    COPY ["Alrium.Data/Alrium.Data.csproj", "Alrium.Data/"]
    COPY ["Alrium.Services/Alrium.Services.csproj", "Alrium.Services/"]
    COPY ["Alrium.StyleMapper/Alrium.StyleMapper.csproj", "Alrium.StyleMapper/"]
    RUN dotnet restore "Alrium.WebAPI/Alrium.WebAPI.csproj"
    COPY . .
    WORKDIR "/src/Alrium.WebAPI"
    RUN dotnet build "Alrium.WebAPI.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "Alrium.WebAPI.csproj" -c Release -o /app/publish /p:UseAppHost=false
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "Alrium.WebAPI.dll"]
    

    这个dockerfile是Visual Studio为我创建的。我唯一改变的是构建映像。。。我把它改为服务器核心(默认为服务器纳米)。我之所以做出这样的改变,是因为微软说使用服务器核心可以避免构建问题。

    有什么想法吗?

    0 回复  |  直到 1 年前
        1
  •  0
  •   Jason Pan    1 年前

    根据您的描述,您可以通过注释Isdevelopment条件来解决此问题。代码应该如下所示。

            var app = builder.Build();
    
            // Configure the HTTP request pipeline.
    
            /// ====>comment this condition app.Environment.IsDevelopment())<===========
            //if (app.Environment.IsDevelopment())
            //{
            //    app.UseSwagger();
            //    app.UseSwaggerUI();
            //}
    
            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My Api v1");
                c.RoutePrefix = string.Empty;
            });
    
            app.UseHttpsRedirection();
    
            app.UseAuthorization();
    
    
            app.MapControllers();
    
            app.Run();