【问题标题】:Why is asp.net core microservice returning 404?为什么asp.net core微服务返回404?
【发布时间】:2022-01-18 23:29:43
【问题描述】:

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

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

如果我运行 docker compose,容器运行良好,但导航到 localhost:5000/swagger 时会出现 404。

我尝试在应用程序目录中创建另一个 dockerfile(使用 VS docker 工具),这导致运行该容器时行为正常(我得到了 swagger ui)。该应用程序在没有直接在我的本地运行 VS 的情况下进行调试时也可以正常工作)。

我不确定问题出在哪里。

Dockerfile

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

【问题讨论】:

    标签: asp.net .net docker .net-core microservices


    【解决方案1】:

    默认情况下,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
    

    【讨论】:

    • 我现在感觉很愚蠢,我几乎可以确定这是关于 ssl 证书或 https 重定向的问题。谢谢解答!!
    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 2021-02-01
    • 2020-04-28
    • 2021-03-07
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多