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