首页 > 解决方案 > 500 内部服务器错误 Docker 托管的 ASP.Net MVC Web 应用程序(已解决)

问题描述

我们有一个 ASP.Net MVC 应用程序,当我们从 Visual Studio 以调试模式在本地运行时,它运行良好。我们有 4 个类库项目和一个 web api 项目。以下是我的码头文件:

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY xxxxx/*.csproj ./xxxxx/
COPY yyyyyy/*.csproj ./yyyyy/
# copy everything else and build app
COPY xxxxx/ ./xxxxx/
COPY yyyyy/ ./yyyyy/
RUN nuget restore

WORKDIR /app/GetThree
RUN msbuild /p:Configuration=Release

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
WORKDIR /inetpub/wwwroot
COPY --from=build /app/xxxxx/. ./

一旦我构建了 docker 文件,一切都会正确编译并且构建也成功(所有 Nuget 包都已恢复)并且我也能够创建容器。但不幸的是,每当我尝试浏览我的网络应用程序时(我得到了容器的 IP 地址,因为这是 Windows 基础),但不幸的是,我立即收到 HTTP 500 内部服务器错误。我已确保为详细的错误消息设置了 HTTPERROR 部分。

一旦我导航到 IP 地址,我就会收到这个 500 错误,不幸的是,日志(应用程序或系统)中没有太多可用的信息,这将帮助我了解问题可能是什么。有什么帮助吗?

以下是我用来构建和运行容器的命令:

docker build -f .\GetThree\Dockerfile -t threecms/cmsdocker:1.0 
docker run --name threecms --rm -it -p 8100:80 threecms/cmsdocker:1.0

要浏览该站点,我获取 IP 地址(使用 docker exec threecms ipconfig)并使用以下方式浏览它:http://ipadress:8100

更新1:-

我使用以下 dockerfile 从上面的图像创建了另一个图像( urlrewrite 是 URLREWRITE 模块安装脚本)

FROM threecms/cmsdocker:1.0
WORKDIR C:/
Copy urlrewrite.ps1/ .
RUN "Powershell ./urlrewrite.ps1"

RUN Install-WindowsFeature Web-Mgmt-Service; \

New-ItemProperty -Path HKLM:\software\microsoft\WebManagement\Server -Name EnableRemoteManagement -Value 1 -Force; \

Set-Service -Name wmsvc -StartupType automatic;

URL 重写 PS1 脚本:

New-Item c:/msi -ItemType Directory
Invoke-WebRequest 'http://download.microsoft.com/download/C/F/F/CFF3A0B8-99D4-41A2-AE1A-496C08BEB904/WebPlatformInstaller_amd64_en-US.msi' -OutFile c:/msi/WebPlatformInstaller_amd64_en-US.msi
Start-Process 'c:/msi/WebPlatformInstaller_amd64_en-US.msi' '/qn' -PassThru | Wait-Process
cd 'C:/Program Files/Microsoft/Web Platform Installer'; .\WebpiCmd.exe /Install /Products:'UrlRewrite2,ARRv3_0' /AcceptEULA /Log:c:/msi/WebpiCmd.log

然后我使用以下命令运行容器:-

docker run --name threecms2 -d cmswindfeature/cmswinfeature:3.0

现在,每当我从浏览器访问我的应用程序时,它都会给我实际的错误消息,即:

Access to the path 'C:\inetpub\wwwroot\App_Data\TEMP\PluginCache\umbraco-plugins.373F7AAE388A.hash' is denied.

更新:-2 已解决

因此,为了解决上述错误,我运行了以下 Powershell 脚本(添加所需的权限)和 Boom,我能够访问我的站点并且它现在可以工作:-

$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS_IUSRS", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl = Get-ACL "C:\inetpub\wwwroot"
$acl.AddAccessRule($accessRule)
Set-ACL -Path "C:\inetpub\wwwroot" -ACLObject $acl

标签: asp.net-mvcdockeriis

解决方案


您需要从网站的应用程序池中找出它正在运行的身份(默认情况下是应用程序池身份)并授予正确的权限。正常情况下是IIS_IUSRS,可以尝试以下步骤解决:

右键单击文件夹->转到安全选项卡->单击编辑->单击添加->单击高级->立即查找->授予IIS_IUSRS权限(完全控制)->单击确定->单击确定->在允许中单击“完全控制”-> 单击“确定”。

注意:如果上述事情不起作用,请尝试向 NETWORK、NETWORK SERVICE 用户授予相同的权限


推荐阅读