From 02316598de2134e30b9e6dfd9a1283a28a09f1a6 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 29 Aug 2016 08:19:56 -0400 Subject: [PATCH] Add the ability to enter a running container --- README.md | 9 +++++++++ common-functions | 15 +++++++++++++++ subcommands/enter | 16 ++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100755 subcommands/enter diff --git a/README.md b/README.md index a856403..c6bafc0 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ postgres:clone Create container then copy data fro postgres:connect Connect via psql to a postgres service postgres:create Create a postgres service with environment variables postgres:destroy Delete the service and stop its container if there are no links left +postgres:enter [command] Enter a running couchdb service or run a command postgres:export > Export a dump of the postgres service database postgres:expose [port] Expose a postgres service on custom port if provided (random port otherwise) postgres:import < Import a dump into the postgres service database @@ -71,6 +72,14 @@ dokku postgres:info lolipop --service-root dokku postgres:info lolipop --status dokku postgres:info lolipop --version +# a bash prompt can be opened against a running service +# filesystem changes will not be saved to disk +dokku postgres:enter lolipop + +# you may also run a command directly against the service +# filesystem changes will not be saved to disk +dokku postgres:enter lolipop ls -lah / + # a postgres service can be linked to a # container this will use native docker # links via the docker-options plugin diff --git a/common-functions b/common-functions index 69e3d25..08a653f 100755 --- a/common-functions +++ b/common-functions @@ -102,6 +102,21 @@ service_alternative_alias() { echo "$ALIAS" } +service_enter() { + declare desc="enters running app container of specified proc type" + declare SERVICE="$1" && shift 1 + local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + local ID="$(cat "$SERVICE_ROOT/ID")" + + docker inspect "$ID" &> /dev/null || dokku_log_fail "Container does not exist" + is_container_status "$ID" "Running" || dokku_log_fail "Container is not running" + + local EXEC_CMD="" + has_tty && local DOKKU_RUN_OPTS+=" -i -t" + # shellcheck disable=SC2086 + docker exec $DOKKU_RUN_OPTS $ID $EXEC_CMD "${@:-/bin/bash}" +} + service_exposed_ports() { declare desc="Lists exposed ports for a service" declare SERVICE="$1" diff --git a/subcommands/enter b/subcommands/enter new file mode 100755 index 0000000..d59a44f --- /dev/null +++ b/subcommands/enter @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config" +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_BASE_PATH/common/functions" +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" + +enter-cmd() { + declare desc="enter a running $PLUGIN_SERVICE service or run a command" + local cmd="$PLUGIN_COMMAND_PREFIX:enter" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" && shift 1 + + dokku_log_info1_quiet "Filesystem changes may not persist after container restarts" + service_enter "$SERVICE" "$@" +} + +enter-cmd "$@"