не может выполнить RUN mkdir в Dockerfile с пробелом в имени каталога - PullRequest
0 голосов
/ 31 августа 2018

Я хочу создать файл на диске C при создании образа докера и с помощью команды, как показано ниже

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"]

Не могли бы вы помочь мне с соответствующей командой?

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Мы можем использовать команду PowerShell для создания папки с пробелами.

Попробуйте это:

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

Это работает !!!

0 голосов
/ 15 января 2019

наткнулся на ту же проблему. Ни один из ответов не сработал для меня. Наконец-то я заработал, выбрав пробел с помощью `

RUN mkdir "C:\Program` Files\Microsoft` Passport` RPS"
COPY . "C:\Program` Files\Microsoft` Passport` RPS"

Другой подход заключается в использовании Shell и явном объявлении escape

Несмотря на то, что форма JSON однозначна и не использует ненужный cmd.exe, она требует большей детализации благодаря двойным кавычкам и экранированию. Альтернативный механизм заключается в использовании инструкции SHELL и формы оболочки, что делает более естественным синтаксис для пользователей Windows, особенно в сочетании с директивой escape-анализатора

# 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'
0 голосов
/ 31 августа 2018

Вы должны покинуть пространство, например:

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

Или используя JSON format:

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

примечание: с использованием JSON format необходимо для избежания обратной косой черты. Это особенно актуально в Windows, где обратная косая черта является разделителем пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...