使用 docker 在 .net6 中浏览 .net 应用程序导致问题

browse .net application in .net6 with docker cause a problem

我有这个应用程序,你可以看到我在 IIS Express 中 运行:

所以我想 运行 在 docker 上生成 docker 文件:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Docker/Docker.csproj", "Docker/"]
RUN dotnet restore "Docker/Docker.csproj"
COPY . .
WORKDIR "/src/Docker"
RUN dotnet build "Docker.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Docker.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Docker.dll"]

所以我用这个命令创建了你可以看到的图像:

docker build -t containername/tag -f docker/Dockerfile .

图像已创建,所以我想 运行 我的容器使用这个 :

docker run -d -p 42419:42419 --name apitest containername/tag:latest

容器已创建,但是当我调用它时 url http://localhost:42419/swagger/index.html 我看不到 swagger 页面。为什么?

您的应用程序需要将环境变量设置为 'Development' 才能使用 Swagger。它在生产中不可用,这是 Docker 默认的。

您可以像这样在 运行 命令中添加 ASPNETCORE_ENVIRONMENT 变量

docker run -d -p 42419:80 -e ASPNETCORE_ENVIRONMENT=Development --name apitest containername/tag:latest

您也可以将其添加到 Docker 文件中,如果您希望通过添加

将 Development 设为默认
ENV ASPNETCORE_ENVIRONMENT=Development

在 Docker 文件的 'final' 部分的某处。

第三个选项是修改您的 startup.cs 文件并在设置 Swagger 时删除对环境变量的检查。这样一来,无论如何它都可以使用。