#docker #powershell #iis-8 #docker-for-windows
Вопрос:
Я пытаюсь использовать один и тот же файл dockerfile для создания изображений ltsc2016 и ltsc2019, но я застрял в команде appcmd.
Для ltsc2016 работает только в том случае, если котировки '
:
RUN c:windowssystem32inetsrvappcmd set app 'Default Web Site/' /enabledProtocols:"http"
Если я перейду на двойные кавычки:
БЕГИ c:windowssystem32inetsrvappcmd установите приложение «Веб-сайт по умолчанию/» /Включенные настройки:»http»
Не удалось обработать ввод: параметр » Web » должен начинаться с / или — (HRESULT=80070057).
Для изображения ltsc2019 работает только в том случае, если изображения "
:
RUN c:windowssystem32inetsrvappcmd set app "Default Web Site/" /enabledProtocols:"http"
Но если я установлю значение равным ltsc2019, я получу:
для обработки ввода: Параметр «Web» должен начинаться с / или — (HRESULT=80070057).
Странно, но enabledProtocols отлично работает на обоих изображениях, используя один и тот же символ для цитаты.
Это похоже на ошибку на appcmd.exe но я не смог бы обойти это.
Есть какие-нибудь идеи?
Файл dockerfile:
# escape=`
#from ms samples https://github.com/microsoft/dotnet-framework-docker/blob/main/src/wcf/4.8/windowsservercore-ltsc2022/Dockerfile
ARG REPO=mcr.microsoft.com/dotnet/framework/aspnet
ARG OS_VERSION=ltsc2022
FROM $REPO:4.8-windowsservercore-${OS_VERSION}
# Install Windows components required for WCF service hosted on IIS
RUN dism /Online /Quiet /Enable-Feature /All /FeatureName:WCF-HTTP-Activation45 /FeatureName:WCF-TCP-Activation45 /FeatureName:IIS-WebSockets /FeatureName:IIS-BasicAuthentication
# Enable net.tcp protocol for default web site on IIS
RUN c:windowssystem32inetsrvappcmd set app "Default Web Site/" /enabledProtocols:"http"
EXPOSE 80
WORKDIR C:inetpubwwwroot
COPY . .
Комментарии:
1. Что, если вы поместите все команды в
.ps1
файл, а затем вызоветеpowershell -file some.ps1
своиDockerfile
? Может быть, плохой парень-Докер.2. Просто некоторые общие указания: если
'
кавычки работают, подразумевается, что PowerShell используется для выполнения командной строки. Если"
работают только кавычки,cmd.exe
подразумевается (или вообще не используется оболочка).
Ответ №1:
@mklement0
дал правильный указатель, команда была выполнена с cmd.exe
одним изображением и с powershell
другим, и это вызывало разное поведение в отношении кавычек.
Итак, просто нужно было заставить RUN
команду использовать powershell
всегда, добавив следующую команду при запуске:
SHELL ["powershell", "-Command"]
Полный файл dockerfile:
# escape=`
#from ms samples https://github.com/microsoft/dotnet-framework-docker/blob/main/src/wcf/4.8/windowsservercore-ltsc2022/Dockerfile
ARG REPO=mcr.microsoft.com/dotnet/framework/aspnet
ARG OS_VERSION=ltsc2022
FROM $REPO:4.8-windowsservercore-${OS_VERSION}
#force the use of powershell on all builds
SHELL ["powershell", "-Command"]
# Install Windows components required for WCF service hosted on IIS
RUN dism /Online /Quiet /Enable-Feature /All /FeatureName:WCF-HTTP-Activation45 /FeatureName:WCF-TCP-Activation45 /FeatureName:IIS-WebSockets /FeatureName:IIS-BasicAuthentication
# Enable net.tcp protocol for default web site on IIS
RUN c:windowssystem32inetsrvappcmd set app "Default Web Site/" /enabledProtocols:"http"
EXPOSE 80
WORKDIR C:inetpubwwwroot
COPY . .
Комментарии:
1. Называть это
msdos
-старая привычка, которая не умерла. только что обновлено.