Используйте PowerShell как дефолтную оболочку, но отмените его во время выполнения для командного файла - PullRequest
0 голосов
/ 20 мая 2019

Я использую PowerShell в качестве оболочки по умолчанию в Dockerfile для выполнения некоторых задач, таких как добавление новых пользователей и групп в мою сборку контейнера.

DockerFile (актуально)

SHELL ["powershell.exe", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"]
RUN New-LocalUser -Name "testuser" -Password (ConvertTo-SecureString -AsPlainText "CrackPassword!" -Force) -FullName "Test.User" -Description "LocalAdministrator"
RUN Add-LocalGroupMember -Group administrators -Member  testuser -Verbose
RUN "C:/Windows/Microsoft.NET/Framework64/v4.0.30319/InstallUtil.exe" /username=.\testuser /password=CrackPassword! /LogToConsole=true /ShowCallStack TestDockerService.exe

В том же DockerFile я указываю CMD для запуска пакетного файла при запуске Docker container.

COPY testbat.bat /testbat.bat
CMD testbat.bat && cmd

Изображение строится нормально, но Docker Run не работает, жалуется:

At line:1 char:111
+ ... rence = 'Continue'; $verbosePreference='Continue'; testbat.bat && cmd
+                                                                    ~~
The token '&&' is not a valid statement separator in this version.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordEx
   ception
    + FullyQualifiedErrorId : InvalidEndOfLine

Я догадывался, что была проблема с запуском CMD внутри SHELL, и некоторые быстрые исследования показали, что это может быть так ...

Есть ли способ закрыть вызванный сеанс SHELL или overrride с помощью CMD во время выполнения?

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