Синтаксис exec требует формата JSON, что означает, что экземпляры \
в элементах массива должны быть экранированы как \\
.
Поскольку ваша инструкция ENTRYPOINT
, следовательно, не содержит допустимого массива JSON, похоже, что Docker возвращается к shell синтаксис и поэтому передает ваш ENTRYPOINT
аргумент оболочки, который в вашем случае является PowerShell, как определено в вашей инструкции SHELL
, и что приводит к команде сломанной оболочки . [1]
Синтаксически правильный ENTRYPOINT
в формате exec - то есть действительный JSON - предотвращает участие оболочки, что является правильным подходом в этомcase , учитывая, что ваша команда содержит только литерал элементов.
Поэтому попробуйте следующее (\
экземпляров, экранированных как \\
):
ENTRYPOINT ["c:\\spinner.exe", "service", "w3svc", "-t", "c:\\iislog\\W3SVC\\u_extend1.log"]
Таким образом, Docker должен выполнить следующую командную строку в контейнере:
c:\spinner.exe service w3svc -t c:\iislog\W3SVC\u_extend1.log
[1] В результате получается неверный аргумент ENTRYPOINT
, ["c:\spinner.exe", "service", "w3svc", "-t", "c:\iislog\W3SVC\u_extend1.log"]
, считается одиночным аргументом, передаваемым в оболочку , как определено вашей SHELL
инструкцией. Это означает добавление этого аргумента к последнему аргументу вашего массива SHELL
, которому предшествует символ пробела. Когда результат объединяется в единую командную строку, внедренные символы "
и \
должны быть \
-экранированы, что объясняет то, что вы видели в журналах.