为什么 asp.net 核心微服务返回 404?

Why is asp.net core microservice returning 404?

我写了一个小演示来理解微服务和 DDD。这是文件结构。

├───.dockerignore
├───docker-compose.yml
├───Dockerfile
├───MicroserviceDemo.sln
├───MicroserviceDemo.Application
│   ├───MicroserviceDemo.Application.csproj
│   └───...
├───MicroserviceDemo.Domain
│   ├───MicroserviceDemo.Domain.csproj
│   └───...
└───MicroserviceDemo.Infrastructure
    ├───MicroserviceDemo.Infrastructure.csproj
    └───...

如果我 运行 docker 撰写,容器 运行 没问题,但我在导航到 localhost:5000/swagger.

时收到 404

我尝试在应用程序目录中创建另一个 docker 文件(使用 VS docker 工具),这导致在 运行 连接该容器时出现正常行为(我得到了招摇ui)。该应用程序在没有 dockers 运行ning 直接在我的本地使用 VS 进行调试时也能正常工作。

我不太确定问题出在哪里。

Docker 文件

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

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MicroserviceDemo.Application/MicroserviceDemo.Application.csproj", "MicroserviceDemo.Application/"]
COPY ["MicroserviceDemo.Infrastructure/MicroserviceDemo.Infrastructure.csproj", "MicroserviceDemo.Infrastructure/"]
COPY ["MicroserviceDemo.Domain/MicroserviceDemo.Domain.csproj", "MicroserviceDemo.Domain/"]

RUN dotnet restore "MicroserviceDemo.Application/MicroserviceDemo.Application.csproj"
COPY . .

WORKDIR "/src/MicroserviceDemo.Application"
RUN dotnet build "MicroserviceDemo.Application.csproj" -c Release -o /app/build

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

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

docker-compose.yml

version: '3'
services:
  infrastructure:
    image: "mcr.microsoft.com/mssql/server"
    container_name: microservice-demo-database
    restart: always
    environment:
      SA_PASSWORD: "Your_password123"
      ACCEPT_EULA: "Y"
    ports:
      - 5432:5432
  rabbitmq:
    image: rabbitmq:3-management
    container_name: microservice-demo-rabbitmq
    ports:
      - 5672:5672
      - 15672:15672
    environment:
      - RABBITMQ_DEFAULT_USER=user
      - RABBITMQ_DEFAULT_PASS=password
  api:
    image: microservice-demo:latest
    build: .
    container_name: microservice-demo-api
    restart: always
    depends_on:
      - infrastructure
      - rabbitmq
    ports:
      - 5000:80
      - 5001:443

默认情况下,Swagger 仅在开发模式下可用。默认情况下,容器中的应用程序处于生产模式。

至 运行 在开发模式下,您可以将 ASPNETCORE_ENVIRONMENT 变量设置为 Development 并且 Swagger 应该可用。

  api:
    image: microservice-demo:latest
    build: .
    container_name: microservice-demo-api
    restart: always
    depends_on:
      - infrastructure
      - rabbitmq
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
    ports:
      - 5000:80
      - 5001:443