无法从 docker compose 访问.net 8.0 API

问题描述 投票:0回答:1

我正在尝试使用 Docker 并尝试学习它。我的目标是创建一个具有多个 .net core API 和 Angular 前端的微服务设置。

我从 1 个 API 开始。 我制作了一个 dockerfile 和一个 docker-compose 文件。

我的dockerfile:

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Api/Api.csproj", "Api/"]
RUN dotnet restore "./Api/./Api.csproj"
COPY . .
WORKDIR "/src/Api"
RUN dotnet build "./Api.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

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

我的 docker-compose 文件:

version: '3.4'

services:
  todo.api:
    image: todoapi
    container_name: todo.api
    build:
      context: ./TestProject.Service.Todo
      dockerfile: Api/Dockerfile
    ports:
      - "5000:5000"
      - "5001:5001"

每当我启动 docker-compose 时,它都会运行并创建一个没有问题的容器,但是当我尝试访问 API 项目中默认添加的“WeatherForecast”api 方法时,我无法访问它。

当我使用 Docker 选项运行 Visual Studio 时,它也会毫无问题地创建容器,并且我可以毫无问题地访问“WeatherForecast”api 方法。

我目前看不出我当前的基本设置有什么问题,有人可以帮助我发现问题吗?

我用谷歌搜索了这个问题,但似乎没有找到解决我的问题的有效解决方案。

windows docker .net-core docker-compose
1个回答
0
投票

有几个因素可能会导致这种情况

您肯定遇到的一个问题是,dockerized .NET 8 应用程序在端口 8080 上侦听 HTTP 流量。默认情况下,未启用 HTTPS。因此,您需要映射端口 8080,而不是像您所做的那样映射端口 5000 和 5001。

另一个问题是 Swagger 默认仅在开发环境中可用(设置它的代码位于 Program.cs 文件中)。 Docker 默认不被视为开发,因此 Swagger 通常不可用。

要启用 Swagger,您可以更改 Program.cs,也可以将 ASPNETCORE_ENVIRONMENT 环境变量设置为 Development。

如果您将撰写文件更改为

version: '3.4'

services:
  todo.api:
    image: todoapi
    container_name: todo.api
    build:
      context: ./TestProject.Service.Todo
      dockerfile: Api/Dockerfile
    ports:
      - "8080:8080"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development

然后您应该能够在

http://localhost:8080/swagger
上访问 Swagger 以及在
http://localhost:8080/weatherforecast
上访问 API。

© www.soinside.com 2019 - 2024. All rights reserved.