implement docker stop timeout. closes #2126 (#2148)

This commit is contained in:
Michael Hobbs
2016-04-26 18:06:55 -07:00
parent 28f83ab0d5
commit cb9efa3322
4 changed files with 22 additions and 4 deletions

View File

@@ -143,6 +143,8 @@ dokku_deploy_cmd() {
for oldid in $oldids; do
dokku_log_info2 "$oldid"
done
local DOKKU_DOCKER_STOP_TIMEOUT="$(config_get "$APP" DOKKU_DOCKER_STOP_TIMEOUT || true)"
[[ $DOKKU_DOCKER_STOP_TIMEOUT ]] && DOCKER_STOP_TIME_ARG="--time=${DOKKU_DOCKER_STOP_TIMEOUT}"
(
exec >/dev/null 2>/dev/null </dev/null
trap '' INT HUP
@@ -151,7 +153,8 @@ dokku_deploy_cmd() {
# Attempt to stop, if that fails, then force a kill as docker seems
# to not send SIGKILL as the docs would indicate. If that fails, move
# on to the next.
docker stop "$oldid" \
# shellcheck disable=SC2086
docker stop $DOCKER_STOP_TIME_ARG "$oldid" \
|| docker kill "$oldid" \
|| plugn trigger retire-container-failed "$APP" # plugin trigger for event logging
done

View File

@@ -1,6 +1,7 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
apps_create() {
declare desc="verifies app name and creates an app"
@@ -34,11 +35,14 @@ apps_destroy() {
plugn trigger pre-delete "$APP" "$IMAGE_TAG"
local DOKKU_APP_CIDS=$(get_app_container_ids "$APP")
local cid
local DOKKU_DOCKER_STOP_TIMEOUT="$(config_get "$APP" DOKKU_DOCKER_STOP_TIMEOUT || true)"
[[ $DOKKU_DOCKER_STOP_TIMEOUT ]] && DOCKER_STOP_TIME_ARG="--time=${DOKKU_DOCKER_STOP_TIMEOUT}"
if [[ -n $DOKKU_APP_CIDS ]]; then
local cid
for cid in $DOKKU_APP_CIDS; do
docker stop "$cid" > /dev/null || true
# shellcheck disable=SC2086
docker stop $DOCKER_STOP_TIME_ARG "$cid" > /dev/null || true
docker rm "$cid" > /dev/null || true
done
fi

View File

@@ -1,6 +1,7 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
print_dokku_scale_file() {
declare desc="prints contents of DOKKU_SCALE file"
@@ -107,9 +108,12 @@ ps_stop() {
! (is_deployed "$APP") && echo "App $APP has not been deployed" && exit 0
if [[ -n "$DOKKU_APP_RUNNING_CONTAINER_IDS" ]]; then
local DOKKU_DOCKER_STOP_TIMEOUT="$(config_get "$APP" DOKKU_DOCKER_STOP_TIMEOUT || true)"
[[ $DOKKU_DOCKER_STOP_TIMEOUT ]] && DOCKER_STOP_TIME_ARG="--time=${DOKKU_DOCKER_STOP_TIMEOUT}"
echo "Stopping $APP ..."
# shellcheck disable=SC2086
docker stop $DOKKU_APP_RUNNING_CONTAINER_IDS > /dev/null || true
docker stop $DOCKER_STOP_TIME_ARG $DOKKU_APP_RUNNING_CONTAINER_IDS > /dev/null || true
plugn trigger post-stop "$APP"
else
echo "App $APP already stopped"