How do I specify a PowerShell script as a Docker container entry point?
Yes you can specify powershell as default shell like below on top of DOCKERFILE
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"]
I'm not sure you can do anything about time it takes to spin down your VM
Web User
Updated on June 18, 2022Comments
-
Web User almost 2 years
I need to run a [Windows] Docker container as an executable, running a rather involved PowerShell script (invoking Java and .NET applications) and exiting. Docker documentation suggests using
ENTRYPOINT
for this purpose. So I went ahead and created a Dockerfile with the following contents:FROM microsoft/dotnet-framework COPY run.ps1 / ENTRYPOINT [ "powershell.exe", "C:\\run.ps1" ]
The contents of
run.ps1
(uber-simplified for this question):gci write-host "looks like everything is good!"
Then, I ran the following commands:
# Build the Docker image docker build --rm -t testdockerps . # Create/run container using above image docker run -it testdockerps
The container ran successfully, displaying the contents of
C:\
followed by the message -looks like everything is good!
.I have a couple of questions based on what my observations:
- What is the default shell for a Windows based Docker container? Is there any way to set it to PowerShell, so I don't have to specify "powershell" as the first element of the
ENTRYPOINT
JSON array? Should I be using theSHELL
command in the Dockerfile? - Creating and running the container takes about 3-4 seconds which is somewhat understandable, but after the PS1 script completes, it takes nearly a questionable 10 seconds for the container to exit and return to the command prompt. What may be the cause of this delay?
- What is the default shell for a Windows based Docker container? Is there any way to set it to PowerShell, so I don't have to specify "powershell" as the first element of the
-
Web User about 6 yearsAdding
SHELL
did not take any effect, i.e. I still needed to specify"powershell"
as the first argument toENTRYPOINT
. Otherwise, the Docker container fails. It looks likeSHELL
is only useful forRUN
commands defined in the Dockerfile, but it does not actually set PowerShell as the default shell in the container. I learnt something too, that I am using the exec form ofENTRYPOINT
, so there is apparently no shell. But still, how does the container know which type of runtime environment to pick up if specifyWrite-Host "hello world"
versusecho hello world
? -
Gregory Suvalian about 6 yearsBelow works for me
FROM microsoft/windowsservercore:1709 SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"] ENTRYPOINT Write-output "hello"
-
Web User about 6 yearsThanks for that clarification. I wanted to set an environment variable in the container and override the entry point to print all the environment variables in the container environment. I used this command but am having trouble with it:
docker run --entrypoint "powershell" <image> --env HOSTNAME=$Env:COMPUTERNAME "gci Env:*"
. I get an error with unexpected token and missing expression. But the same command works perfectly fine without the--env
parameter. Why is that? -
Gregory Suvalian about 6 yearsThis works just fine for me and print
test
as outputdocker run --entrypoint "powershell" --env HOSTNAME="test" microsoft/windowsservercore:1709 "gci Env:HOSTNAME"
Try putting you image after --env parameter -
Web User about 6 yearsYes, placing the image name after
--env
worked. Thanks!