Dockerfile调用安装msi

7
我很难通过Dockerfile安装msi。我的Dockerfile如下:
FROM microsoft/windowsservercore:latest

RUN mkdir C:\temp 
RUN mkdir C:\temp\msis

COPY . "C:/temp/msis"
RUN powershell -version 5.0 -command { Start-process -Filepath "C:\temp\msis\mySetup.msi" -ArgumentList  "/qn" -PassThru | Wait-Process}

当使用以下命令运行docker build:

docker build -t myTools .

I get the following error:

Step 7/7 : RUN powershell -version 5.0 -command { Start-process -Filepath "C:\temp\msis\mySetup.msi" -ArgumentList  "/qn" -PassThru | Wait-Process}
---> Running in d6f9f65d96a9
'Wait-Process}' is not recognized as an internal or external command,operable program or batch file.

如果我在不运行RUN步骤的情况下构建容器,并通过-it附加到正在运行的容器上,并粘贴命令,则MSI将被正确安装。有人知道为什么会出现这种错误吗?谢谢。
1个回答

16

可能是PowerShell解析问题。

请使用以下两行代替您的最后一行:

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

RUN Start-Process 'C:\\temp\\msis\\mySetup.msi' '/qn' -PassThru | Wait-Process;

如果您愿意,可以之后回到cmd.exe:

SHELL ["cmd", "/C"]

谢谢您的快速回复。您的答案救了我的一天! - Moerwald
两周前我曾苦于那些难以调用的MSI安装程序,它们绝对不是直观的。 - v.karbovnichy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接