我正在开发一个非常基本的asp.net核心Web应用程序。
当我在个人计算机上手动运行该应用程序时,端口为5050。
我已经编写了一个Dockerfile(从教程中得到启发)。在这里:
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["projet1.csproj", "./"]
RUN dotnet restore "./projet1.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "projet1.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "projet1.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "projet1.dll"]
运行图像时,应用程序正在端口80上应答。这是一件好事,但是我想了解为什么它正在端口80上侦听。
我没有配置文件,也没有命令行参数,它告诉我的应用程序监听80端口。这种差异怎么可能?
答案 0 :(得分:0)
这是您正在使用的运行时映像的概述中的documented(在底部):
此图像将
ASPNETCORE_URLS
环境变量设置为http://+:80
,这意味着,如果您未明确[sic]在应用程序中设置URL,请通过Program.cs中的app.UseUrl
例如,那么您的应用程序将监听容器内的端口80。
在本地运行应用程序时,默认使用端口5000
(HTTP)和5001
(HTTPS)。可以在launchSettings.json
中对此进行覆盖,我希望您已完成此操作,以使其在您的环境中使用5050
。
请注意,您不赞成使用正在使用的图像,而推荐使用Microsoft自托管的mcr.microsoft.com/dotnet/core/aspnet和mcr.microsoft.com/dotnet/core/sdk图像。