#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, но я решил эту проблему и опубликовал ответ в своем предыдущем сообщении.