Как указать сценарий PowerShell в качестве точки входа контейнера Docker?

Мне нужно запустить Docker-контейнер [Windows] как исполняемый файл, запустить довольно сложный скрипт PowerShell (вызывая приложения Java и.NET) и завершить работу. Документация Docker предлагает использовать ENTRYPOINT для этого. Поэтому я решил создать Dockerfile со следующим содержимым:

FROM microsoft/dotnet-framework
COPY run.ps1 /
ENTRYPOINT [ "powershell.exe", "C:\\run.ps1" ]

Содержание run.ps1 (упрощенно для этого вопроса):

gci
write-host "looks like everything is good!"

Затем я выполнил следующие команды:

# Build the Docker image
docker build --rm -t testdockerps .

# Create/run container using above image
docker run -it testdockerps

Контейнер успешно запустился, отображая содержимое C:\ сопровождаемый сообщением - looks like everything is good!,

У меня есть пара вопросов, основанных на том, что мои наблюдения:

  1. Какая оболочка по умолчанию для контейнера Docker на базе Windows? Есть ли способ установить его в PowerShell, поэтому мне не нужно указывать "powershell" в качестве первого элемента ENTRYPOINT Массив JSON? Должен ли я использовать SHELL команда в Dockerfile?
  2. Создание и запуск контейнера занимает около 3-4 секунд, что несколько понятно, но после завершения сценария PS1 для завершения и возврата контейнера в командную строку требуется почти сомнительные 10 секунд. Что может быть причиной этой задержки?

1 ответ

Решение

Да, вы можете указать powershell как оболочку по умолчанию, как показано ниже в верхней части DOCKERFILESHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"]

Я не уверен, что вы можете сделать что-нибудь о времени, которое требуется, чтобы раскрутить виртуальную машину

Другие вопросы по тегам