diff --git a/plugins/common/functions b/plugins/common/functions index f489040e9..34599a5a4 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -605,6 +605,9 @@ docker_cleanup() { fi dokku_log_info1 "Cleaning up..." + local DOKKU_SCHEDULER="docker-local" + [[ -n "$APP" ]] && DOKKU_SCHEDULER=$(config_get "$APP" DOKKU_SCHEDULER || echo "docker-local") + plugn trigger scheduler-docker-cleanup "$DOKKU_SCHEDULER" "$APP" "$FORCE_CLEANUP" # delete all non-running containers # shellcheck disable=SC2046 diff --git a/plugins/scheduler-docker-local/scheduler-docker-cleanup b/plugins/scheduler-docker-local/scheduler-docker-cleanup new file mode 100755 index 000000000..cd68209a7 --- /dev/null +++ b/plugins/scheduler-docker-local/scheduler-docker-cleanup @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" + +scheduler-docker-local-scheduler-docker-cleanup() { + declare desc="scheduler-docker-local scheduler-docker-cleanup plugin trigger" + declare trigger="scheduler-docker-local scheduler-docker-cleanup" + declare DOKKU_SCHEDULER="$1" APP="$2" FORCE="$3" + + if [[ "$DOKKU_SCHEDULER" != "docker-local" ]]; then + return + fi + + # delete all non-running containers + # shellcheck disable=SC2046 + docker rm $(docker ps -a -f "status=exited" -f "label=$DOKKU_CONTAINER_LABEL" -q) &> /dev/null || true + + # delete all dead containers + # shellcheck disable=SC2046 + docker rm $(docker ps -a -f "status=dead" -f "label=$DOKKU_CONTAINER_LABEL" -q) &> /dev/null || true + + # delete unused images + # shellcheck disable=SC2046 + docker rmi $(docker images -f 'dangling=true' -q) &> /dev/null & +} + +scheduler-docker-local-scheduler-docker-cleanup "$@"