Как указать сценарий 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!
,
У меня есть пара вопросов, основанных на том, что мои наблюдения:
- Какая оболочка по умолчанию для контейнера Docker на базе Windows? Есть ли способ установить его в PowerShell, поэтому мне не нужно указывать "powershell" в качестве первого элемента
ENTRYPOINT
Массив JSON? Должен ли я использоватьSHELL
команда в Dockerfile? - Создание и запуск контейнера занимает около 3-4 секунд, что несколько понятно, но после завершения сценария PS1 для завершения и возврата контейнера в командную строку требуется почти сомнительные 10 секунд. Что может быть причиной этой задержки?
1 ответ
Да, вы можете указать powershell как оболочку по умолчанию, как показано ниже в верхней части DOCKERFILESHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"]
Я не уверен, что вы можете сделать что-нибудь о времени, которое требуется, чтобы раскрутить виртуальную машину