如何以与图像 ltsc2016 和 lt2019 相同的方式为 appcmd 设置参数应用程序?

How to set argument app for appcmd in the same way for images ltsc2016 and lt2019?

我正在尝试使用相同的 dockerfile 构建映像 ltsc2016 和 ltsc2019,但我卡在了 appcmd 命令上。

对于 ltsc2016 仅当引号为 ':

时才有效
RUN c:\windows\system32\inetsrv\appcmd set app 'Default Web Site/' /enabledProtocols:"http"

如果我改成双引号:

运行 c:\windows\system32\inetsrv\appcmd 设置应用“默认网站/”/enabledProtocols:“http”

Failed to process input: The parameter 'Web' must begin with a / or - (HRESULT=80070057).

对于图像 ltsc2019 仅当图像为 ":

时才有效
RUN c:\windows\system32\inetsrv\appcmd set app "Default Web Site/" /enabledProtocols:"http"

但是如果我设置等于 ltsc2019 我得到:

to process input: The parameter 'Web' must begin with a / or - (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:\windows\system32\inetsrv\appcmd set app "Default Web Site/" /enabledProtocols:"http"

EXPOSE 80

WORKDIR C:\inetpub\wwwroot

COPY . .

@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:\windows\system32\inetsrv\appcmd set app "Default Web Site/" /enabledProtocols:"http"

EXPOSE 80

WORKDIR C:\inetpub\wwwroot

COPY . .