无法在目录名中有空格的Dockerfile中执行RUN mkdir

无法在目录名中有空格的Dockerfile中执行RUN mkdir,docker,dockerfile,Docker,Dockerfile,我想在C驱动器中创建一个文件,同时构建docker映像并使用如下命令 RUN mkdir "C:\Program Files\Microsoft Passport RPS" 但这会带来错误: Step 6/6 : RUN mkdir "C:\Program Files\Microsoft Passport RPS" ---> Running in ab58c6f2948d [91mmkdir : A positional parameter cannot be found that a

我想在C驱动器中创建一个文件,同时构建docker映像并使用如下命令

RUN mkdir "C:\Program Files\Microsoft Passport RPS"
但这会带来错误:

Step 6/6 : RUN mkdir "C:\Program Files\Microsoft Passport RPS"
 ---> Running in ab58c6f2948d
[91mmkdir : A positional parameter cannot be found that accepts argument 'Files\Microsoft'.
At line:1 char:76
+ ... e = 'SilentlyContinue'; mkdir C:\Program Files\Microsoft Passport RPS
[0m[91m+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[0m[91m    + CategoryInfo          : InvalidArgument: (:) [mkdir], ParentContainsErro 
[0m[91m   rRecordException
+ FullyQualifiedErrorId : PositionalParameterNotFound,mkdir
使用正斜杠和反斜杠尝试上述命令

我已尝试了多个其他命令,如下所示:

ENV PATH_WITH_SPACE "C:/Program Files/Microsoft Passport RPS"
RUN mkdir $[PATH_WITH_SPACE]

RUN mkdir ["C:\Program Files\Microsoft Passport RPS"]

你能帮我发出适当的命令吗?

你必须逃离空间,比如:

RUN mkdir "C:\Program Files\Microsoft\ Passport\ RPS"
或者使用
JSON格式

RUN ["mkdir", "C:\\Program Files\\Microsoft\ Passport\ RPS"]

使用
JSON格式
是避免反斜杠的必要条件。这在反斜杠作为路径分隔符的Windows上尤其重要。

我们可以使用PowerShell命令创建带有空格的文件夹

试试这个:

RUN powershell -Command New-Item -Path 'C:\Program Files\Microsoft Passport RPS' -ItemType Directory

它工作

遇到了同样的问题。没有一个答案对我有用。 我最终通过逃离太空和`

RUN mkdir "C:\Program` Files\Microsoft` Passport` RPS"
COPY . "C:\Program` Files\Microsoft` Passport` RPS"
另一种方法是使用Shell,并显式地声明escape


谢谢你的回复。我尝试了这两个命令,但都抛出了错误:在7cfaf9384302中运行[“mkdir”,“C:\\Program Files\\Microsoft\Passport\RPS”]-->$ProgressPreference='SilentlyContinue';[mkdir,C:\\Program Files\\…Missing]位于属性或类型文字的末尾。您要在主机或映像中的何处创建目录?请把你的档案贴出来
# escape=`

FROM microsoft/nanoserver
SHELL ["powershell","-command"]
RUN New-Item -ItemType Directory C:\Example
ADD Execute-MyCmdlet.ps1 c:\example\
RUN c:\example\Execute-MyCmdlet -sample 'hello world'