我正在开发一个非常基本的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。这种差异怎么可能?
最佳答案
这是您正在使用的运行时镜像的概述中的documented(在底部):
This image sets the
ASPNETCORE_URLS
environment variable tohttp://+:80
which means that if you have not explicity [sic] set a URL in your application, viaapp.UseUrl
in your Program.cs for example, then your application will be listening on port 80 inside the container.
在本地运行应用程序时,默认情况下使用端口
5000
(HTTP)和5001
(HTTPS)。可以在launchSettings.json
中覆盖它,我希望您已完成此操作,以使其在您的环境中使用5050
。请注意,不赞成使用您使用的图像,而应使用Microsoft自托管的mcr.microsoft.com/dotnet/core/aspnet和mcr.microsoft.com/dotnet/core/sdk图像。
关于docker - 如何为dotnet MVC应用程序配置默认端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57111154/