【问题标题】:.Net 6 Web Api docker port forwarding issue.Net 6 Web Api docker 端口转发问题
【发布时间】:2021-12-03 13:52:58
【问题描述】:

我有一个安装了 swagger 的空 .NET 6 web api 解决方案。我从 Visual Studio 生成了一个 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 ["Api.Permissions/Api.Permissions.csproj", "Api.Permissions/"]
COPY ["Api.Permissions.Models/Api.Permissions.Models.csproj", "Api.Permissions.Models/"]
COPY ["Api.Permissions.Services/Api.Permissions.Services.csproj", "Api.Permissions.Services/"]
RUN dotnet restore "Api.Permissions/Api.Permissions.csproj"
COPY . .
WORKDIR "/src/Api.Permissions"
RUN dotnet build "Api.Permissions.csproj" -c Release -o /app/build

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

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

我创建了一个 docker 映像并推送到我的 docker hub 帐户。

然后我运行这个命令来拉取并在本地运行镜像:

docker container run -d --name mynewapi -p 8000:443 myusername/myreponame:mycontainername

但是当我浏览到 http://localhost:433/swagger/index.html 我得到:

无法访问此站点 localhost 拒绝连接。

我也尝试使用邮递员向示例端点发出 GET 请求,但我得到了同样的错误。

我在这里做错了什么?

【问题讨论】:

    标签: docker .net-6.0


    【解决方案1】:

    运行容器时,将容器中的 443 端口映射到主机上的 8000 端口。所以你需要使用8000端口来访问它。

    由于您映射的是 https 端口 443,因此您应该使用 https。所以你的网址应该是https://localhost:8000/swagger/index.html

    但这还不够。默认情况下,Swagger 仅在您的解决方案在开发模式下运行时可用。您可以使用需要设置为“开发”的环境变量ASPNETCORE_ENVIRONMENT 来控制它。当您像这样运行容器时,您可以在 docker 命令中执行此操作

    docker container run -d --name mynewapi -p 8000:443 -e ASPNETCORE_ENVIRONMENT=Development myusername/myreponame:mycontainername
    

    或者你可以像这样将它添加到 Dockerfile 中

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
    WORKDIR /app
    ENV ASPNETCORE_ENVIRONMENT=Development
    EXPOSE 80
    EXPOSE 443
    
    FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
    WORKDIR /src
    COPY ["Api.Permissions/Api.Permissions.csproj", "Api.Permissions/"]
    COPY ["Api.Permissions.Models/Api.Permissions.Models.csproj", "Api.Permissions.Models/"]
    COPY ["Api.Permissions.Services/Api.Permissions.Services.csproj", "Api.Permissions.Services/"]
    RUN dotnet restore "Api.Permissions/Api.Permissions.csproj"
    COPY . .
    WORKDIR "/src/Api.Permissions"
    RUN dotnet build "Api.Permissions.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "Api.Permissions.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "Api.Permissions.dll"]
    

    【讨论】:

      猜你喜欢
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多