gpt4 book ai didi

asp.net - 在Docker容器中运行ASP.NET 4.6应用程序-站点始终为404s

转载 作者:行者123 更新时间:2023-12-02 20:45:46 28 4
gpt4 key购买 nike

我一直在尝试使ASP.NET 4.6应用程序在Windows Docker容器中运行,而让IIS在默认网站上运行非常简单,但是要使我的实际应用程序运行却很困难。每当我尝试加载我的应用程序时,它都会返回未找到的404文件。

一些背景:我要运行的应用程序必须安装在“默认网站”下,并且该应用程序和SharedContent应用程序都安装在IIS下,其中SharedContent也是主应用程序下的子应用程序。

这导致3次调用在IIS下安装应用程序:

RUN ["powershell", "New-WebApplication -Name MvcCompaniesV2 -Site 'Default Web Site' -PhysicalPath C:/inetpub/wwwroot/MvcCompaniesV2 -ApplicationPool DefaultAppPool"]
RUN ["powershell", "New-WebApplication -Name SharedContent -Site 'Default Web Site' -PhysicalPath C:/inetpub/wwwroot/SharedContent -ApplicationPool DefaultAppPool"]
RUN ["powershell", "New-WebApplication -Name MvcCompaniesV2/SharedContent -Site 'Default Web Site' -PhysicalPath C:/inetpub/wwwroot/SharedContent -ApplicationPool DefaultAppPool"]

摆弄了整整一天后,我感到困惑。我设法安装了IIS WebManagement,并且可以使用IIS管理器连接到我的容器,并且可以看到我的网站已正确配置,但有一个异常(exception):IIS设置中看不到来自web.config的连接字符串和重写规则,例如它无法访问配置文件。 IIS在IIS APPPOOL \ DefaultAppPool用户下运行,并且wwwroot文件夹在其ACL中添加了IIS_IUSRS(默认情况下)。

这是我的docker文件:
FROM microsoft/aspnet:4.7.2-windowsservercore-1803

EXPOSE 80
EXPOSE 8172

EXPOSE 4020 4021 4022 4023

# WebManagement stuff
RUN ["powershell.exe", "Install-WindowsFeature NET-Framework-45-ASPNET"]
RUN ["powershell.exe", "Install-WindowsFeature Web-Asp-Net45"]
RUN ["powershell.exe", "Install-WindowsFeature web-mgmt-service"]

RUN ["powershell.exe", "Set-ItemProperty -Path 'HKLM:/SOFTWARE/Microsoft/WebManagement/Server' -Name 'EnableRemoteManagement' -Value 1"]
RUN ["powershell.exe", "set-service -Name WMSVC -StartupType Automatic"]
RUN ["powershell", "start-service WMSVC"]
RUN ["powershell", "net user patrick l0lp@ssw0rd /add"]
RUN ["powershell", "net localgroup administrators patrick /add"]

# Rewrite module
ADD https://download.microsoft.com/download/C/9/E/C9E8180D-4E51-40A6-A9BF-776990D8BCA9/rewrite_amd64.msi rewrite_amd64.msi
RUN ["powershell" , "Start-Process msiexec.exe -ArgumentList '/i', 'rewrite_amd64.msi', '/quiet', '/norestart' -NoNewWindow -Wait"]

# Remote debugger
RUN Invoke-WebRequest -OutFile c:\rtools_setup_x64.exe -Uri https://aka.ms/vs/15/release/RemoteTools.amd64ret.enu.exe;
RUN & 'c:\rtools_setup_x64.exe' /install /quiet

ADD bin C:/inetpub/wwwroot/

RUN ["powershell", "New-WebApplication -Name MvcCompaniesV2 -Site 'Default Web Site' -PhysicalPath C:/inetpub/wwwroot/MvcCompaniesV2 -ApplicationPool DefaultAppPool"]
RUN ["powershell", "New-WebApplication -Name SharedContent -Site 'Default Web Site' -PhysicalPath C:/inetpub/wwwroot/SharedContent -ApplicationPool DefaultAppPool"]
RUN ["powershell", "New-WebApplication -Name MvcCompaniesV2/SharedContent -Site 'Default Web Site' -PhysicalPath C:/inetpub/wwwroot/SharedContent -ApplicationPool DefaultAppPool"]

# ErrorPages mode to off
RUN ["powershell", "Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT' -filter 'system.web/customErrors' -name 'mode' -value 'Off'"]
RUN ["powershell", "Set-WebConfigurationProperty -filter 'system.webServer/httpErrors' -name 'errorMode' -value 'Detailed'"]
RUN ["Powershell", "Set-WebConfigurationProperty -pspath 'IIS:\Sites\Default Web Site\MvcCompaniesV2' -filter 'system.webServer/httpErrors' -name 'errorMode' -value 'Detailed'"]

ENTRYPOINT ["powershell", ""]

关于如何解决此问题的任何想法?可以看出,我将IIS和.NET的errorPages模式都更改为详细,但是每当我打开MvcCompaniesV2时,我仍然会得到非常有限的错误页面( https://imgur.com/a/jvj9r7f)。我有点主意,我可以尝试解决此问题。

我尝试了一个示例asp.net页面(直接在“默认网站”下运行,开箱即用)。

编辑:当我将远程调试器附加到我的项目时,它在框架代码内以ArgumentException中断:
System.ArgumentException
HResult=0x80070057
Message=The parameter 'C:/inetpub/wwwroot/MvcCompaniesV2\' is invalid.
Parameter name: C:/inetpub/wwwroot/MvcCompaniesV2\

最佳答案

我通过修复New-WebApplication调用中格式错误的“PhysicalPath”来解决此问题。调试器的ArgumentException放弃了它,IIS不允许/在路径中。将它们更新为C:\\inetpub\\wwwroot\\MvcCompaniesV2后,问题就消失了。

关于asp.net - 在Docker容器中运行ASP.NET 4.6应用程序-站点始终为404s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54827694/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com