Run Docker Containers
Windmill supports running any Docker container through its Bash support. As a pre-requisite, the host docker daemon needs to be mounted into the worker container. This is done through a simple volume mount:
Once Docker is set up, see:
On the docker-compose, it is enough to uncomment the volume mount of the Windmill worker
# mount the docker socket to allow to run docker containers from within the workers
# - /var/run/docker.sock:/var/run/docker.sock
In the charts values of our helm charts, set
Remote Docker Daemon
One possibility to use the docker daemon wiht k8s with containerd is to run a docker daemon in the same pod using "Docker-in-Docker" ( dind) Using the official image
Here an example of a dind template to be adapted:
- name: dind
The default code is as follows:
docker run --rm alpine /bin/echo "Hello $msg"
msg is just a normal bash variable. It can be used to pass arguments to the script. This syntax is the standard bash one to assign default values to parameters.
docker run --rm <image> <command>
--rm is so that the container dispose itself after being executed. It helps unpollute the host.
The image is the docker image to run. It can be any image available on docker hub or any private registry. It can also be a local image.
The command is the command to run inside the container. It can be any command available in the image.
It is just a bash script so it will behave exactly the same as a local command or if running this as an ssh command on the host. As a consequence, you can use any strategy to cache docker images or handle authentification.
Do not use the deamon mode
-d otherwise the script will immediately return while the container continue to run in the background. However, in some cases, that might be what you want.
Like any bash script, it will return the last line of the stdout. So be sure to print the the return value from your command if you'd like to use it as a result.
As a script:
As a flow step:
Use with Remote Docker Daemon
# The Remote Docker Daemon Address -> 100.64.2.97:8000
# In the example, 100.64.2.97 is my pod address.
DOCKER="docker -H 100.64.2.97:8000"
$DOCKER run --rm alpine /bin/echo "Hello $msg"
+ DOCKER='docker -H 100.64.2.97:8000'
+ docker -H 100.64.2.97:8000 run --rm alpine /bin/echo 'Hello '
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
7264a8db6415: Pulling fs layer
7264a8db6415: Verifying Checksum
7264a8db6415: Download complete
7264a8db6415: Pull complete
Status: Downloaded newer image for alpine:latest
+ exit 0