Over time Maelstrom nodes may accumulate unused and unwanted Docker images. Eventually this could consume all disk space on a node.
Maelstrom can be optionally configured to periodically remove untagged images and images that are not associated with any components. This feature is disabled by default, but can be easily enabled by setting a single environment variable.
Example 1: Remove exited containers and untagged images
This is similar in behavior to
docker system prune. To enable this simply set
MAEL_DOCKER_PRUNE_MINUTES to specify the interval this job should run on each
# run daily MAEL_DOCKER_PRUNE_MINUTES=1440
Example 2: Same as #1 plus all images not associated with a component
# run every 12 hours MAEL_DOCKER_PRUNE_MINUTES=720 # remove all images NOT associated with a Maelstrom component MAEL_DOCKER_PRUNE_UNREG_IMAGES=true
This example is a superset of Example 1. In addition to removing exited containers and untagged images Maelstrom will remove all images not associated with a Maelstrom component. For example, if your system has 5 components defined with these image names:
mycorp/web:v1 mycorp/accounting:v2 mycorp/intranet:v2 mycorp/hr mycorp/api
And your maelstrom node has these images stored locally:
mycorp/web:v1 mycorp/accounting:v1 mycorp/accounting:v2 mycorp/intranet:v1 mycorp/intranet:v2 mycorp/hr mycorp/api othercorp/api redis:3.2
Then these images would be removed:
mycorp/accounting:v1 mycorp/intranet:v1 othercorp/api redis:3.2
Example 3: Same as #2, but keep some images
What if you need the redis image and don't want it deleted? Maelstrom allows you to specify a list of image name patterns to keep.
# run every 12 hours MAEL_DOCKER_PRUNE_MINUTES=720 # remove all images NOT associated with a Maelstrom component MAEL_DOCKER_PRUNE_UNREG_IMAGES=true # comma separated list of names to retain. prefix and suffix * globs # are supported (but not full regexps) MAEL_DOCKER_PRUNE_UNREG_KEEP=othercorp/*,redis*
In this configuration only these images would be removed: