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

Vik*_*pta 5 docker dockerfile

我想在构建 docker 映像并使用如下命令时在 C 盘中创建一个文件

RUN mkdir "C:\Program Files\Microsoft Passport RPS"
Run Code Online (Sandbox Code Playgroud)

但它会抛出错误:

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
Run Code Online (Sandbox Code Playgroud)

尝试使用正斜杠和反斜杠来执行上述命令。

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

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

RUN mkdir ["C:\Program Files\Microsoft Passport RPS"]
Run Code Online (Sandbox Code Playgroud)

你能帮我提供适当的命令吗?

小智 6

遇到同样的问题。没有一个答案对我有用。我终于通过使用`逃离空间来让它工作了

RUN mkdir "C:\Program` Files\Microsoft` Passport` RPS"
COPY . "C:\Program` Files\Microsoft` Passport` RPS"
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用 Shell,并显式声明转义

虽然 JSON 形式是明确的,并且不使用不必要的 cmd.exe,但它确实需要通过双引号和转义更加冗长。另一种机制是使用 SHELL 指令和 shell 形式,为 Windows 用户提供更自然的语法,特别是与转义解析器指令结合使用时

# 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'
Run Code Online (Sandbox Code Playgroud)


小智 0

你必须逃离这个空间,有些像:

RUN mkdir "C:\Program Files\Microsoft\ Passport\ RPS"
Run Code Online (Sandbox Code Playgroud)

或者使用JSON format

RUN ["mkdir", "C:\\Program Files\\Microsoft\ Passport\ RPS"]
Run Code Online (Sandbox Code Playgroud)

注意:使用JSON format是转义反斜杠所必需的。这在 Windows 上尤其重要,其中反斜杠是路径分隔符。