如何以与图像 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 . .
我正在尝试使用相同的 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 . .