asp.net-mvc - 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
解决方案
您需要从网站的应用程序池中找出它正在运行的身份(默认情况下是应用程序池身份)并授予正确的权限。正常情况下是IIS_IUSRS,可以尝试以下步骤解决:
右键单击文件夹->转到安全选项卡->单击编辑->单击添加->单击高级->立即查找->授予IIS_IUSRS权限(完全控制)->单击确定->单击确定->在允许中单击“完全控制”-> 单击“确定”。
注意:如果上述事情不起作用,请尝试向 NETWORK、NETWORK SERVICE 用户授予相同的权限
推荐阅读
- c# - 将值插入外键记录
- javascript - Ionic cordova 按钮在 IOS 模拟器中不可点击
- scala - 如何使用 Spark/Scala 在窗口上做 approxQuantile?
- java - 如何将字符串与另一个字符串进行比较并获取索引?
- javascript - useSelector 中的“减少”
- typescript - 有什么方法可以用 Typescript 中的新成员进行递归部分
- android - kotlin string 有没有像 Objc static NSString kUrl = @"users/%@/profile"; 这样的程序员?
- javascript - 如何让我的 Javascript“动画”更好地工作?
- javascript - getDisplayMedia“无法启动音频源”
- mysql - SELECT … FOR UPDATE 对不存在的行