diff --git a/README.md b/README.md index b789d94..87872b6 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ mysql:clone Create container then copy data from < mysql:connect Connect via mysql to a mysql service mysql:create Create a mysql service with environment variables mysql:destroy Delete the service and stop its container if there are no links left +mysql:enter [command] Enter a running couchdb service or run a command mysql:export > Export a dump of the mysql service database mysql:expose [port] Expose a mysql service on custom port if provided (random port otherwise) mysql:import < Import a dump into the mysql service database @@ -71,6 +72,14 @@ dokku mysql:info lolipop --service-root dokku mysql:info lolipop --status dokku mysql:info lolipop --version +# a bash prompt can be opened against a running service +# filesystem changes will not be saved to disk +dokku mysql:enter lolipop + +# you may also run a command directly against the service +# filesystem changes will not be saved to disk +dokku mysql:enter lolipop ls -lah / + # a mysql 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 "$@"