【发布时间】:2021-01-20 15:21:59
【问题描述】:
我们有一个 ASP.Net MVC 应用程序,当我们从 Visual Studio 以调试模式在本地运行时,它运行良好。 我们有 4 个类库项目和一个 web api 项目。以下是我的 docker 文件:
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 REWRITE 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
【问题讨论】:
-
添加用于运行镜像和检查容器日志的命令。
-
@Max 添加了构建和运行映像的命令,每当我运行 docker container logs containerID 命令时,我得到的只是:服务'w3svc'已停止服务'w3svc'启动跨度>
标签: asp.net-mvc docker iis