Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I specify a PowerShell script as a Docker container entry point?

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:

  1. 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 the SHELL command in the Dockerfile?
  2. 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?
like image 336
Web User Avatar asked Apr 16 '18 07:04

Web User


People also ask

How do I run a shell script in Dockerfile ENTRYPOINT?

Step 1: Create a script.sh file and copy the following contents. Step 2: You should have the script.sh is the same folder where you have the Dockerfile. Create the Dockerfile with the following contents which copy the script to the container and runs it part of the ENTRYPOINT using the arguments from CMD.

How do I access docker from PowerShell?

Once Docker is installed, go ahead and open a console window in your operating system. Then look at the Docker Hub page for PowerShell. Notice the command to pull a container with PowerShell to your computer is docker pull mcr.microsoft.com/powershell.

What is docker ENTRYPOINT script?

In Dockerfiles, an ENTRYPOINT instruction is used to set executables that will always run when the container is initiated. Unlike CMD commands, ENTRYPOINT commands cannot be ignored or overridden—even when the container runs with command line arguments stated.


1 Answers

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

like image 98
Gregory Suvalian Avatar answered Oct 14 '22 09:10

Gregory Suvalian