500 Внутренняя ошибка сервера, размещенная в Docker ASP.Net Веб-приложение MVC (РАЗРЕШЕНО)

#asp.net-mvc #docker #iis

#asp.net-mvc #docker #iis

Вопрос:

У нас есть ASP.Net Приложение MVC и которое отлично работает, когда мы запускаем даже локально в режиме отладки из Visual Studio. У нас есть 4 проекта библиотеки классов и один проект веб-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 .GetThreeDockerfile -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:softwaremicrosoftWebManagementServer -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:inetpubwwwrootApp_DataTEMPPluginCacheumbraco-plugins.373F7AAE388A.hash' is denied.
  

ОБНОВЛЕНИЕ: -2 УСТРАНЕНО

Итак, чтобы устранить вышеуказанную ошибку, я запустил следующий сценарий Powershell (для добавления необходимых разрешений), и Бум, я смог получить доступ к своему сайту и его работе сейчас:-

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

Комментарии:

1. Добавьте команду, которую вы используете для запуска образа, и проверьте журналы контейнера.

2. @Max добавил обе команды для сборки и запуска образа, также всякий раз, когда я запускаю команду docker container logs containerId, все, что я получаю, это: служба ‘w3svc’ остановлена, служба ‘w3svc’ запущена

Ответ №1:

Вам необходимо узнать из пула приложений для веб-сайта, под каким идентификатором он работает (по умолчанию это идентификатор пула приложений), и предоставить ему правильные разрешения. обычно это IIS_IUSRS, вы можете попробовать следующие шаги для решения проблемы:

Щелкните правой кнопкой мыши папку -> перейдите на вкладку Безопасность -> Нажмите Редактировать-> Нажмите Добавить-> Нажмите Дополнительно -> Найти сейчас-> Предоставить разрешение IIS_IUSRS (полный контроль) -> Нажмите OK-> Нажмите OK-> Нажмите Полный контроль в разрешить-> Нажмите OK.

Примечание: если вышеуказанные вещи не работают, попробуйте предоставить такое же разрешение СЕТИ, пользователям СЕТЕВЫХ СЛУЖБ

Комментарии:

1. Спасибо за ваш ответ @samwu, но я решил эту проблему и опубликовал ответ в своем предыдущем сообщении.