From 793087097d0f6292c8303076a2097961c676daab Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 10 Apr 2018 23:22:30 -0400 Subject: [PATCH] feat: support a separate data root for Docker bind mounts This does not fix the :backup subcommand, which uses a temporary directory mounted to /backup. --- config | 2 ++ functions | 10 ++++++---- subcommands/destroy | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/config b/config index ad82339..319270e 100644 --- a/config +++ b/config @@ -2,10 +2,12 @@ export MYSQL_IMAGE=${MYSQL_IMAGE:="mysql"} export MYSQL_IMAGE_VERSION=${MYSQL_IMAGE_VERSION:="5.7.12"} export MYSQL_ROOT=${MYSQL_ROOT:="/var/lib/dokku/services/mysql"} +export MYSQL_HOST_ROOT=${MYSQL_HOST_ROOT:=$MYSQL_ROOT} export PLUGIN_COMMAND_PREFIX="mysql" export PLUGIN_CONFIG_ROOT=${PLUGIN_CONFIG_ROOT:="$DOKKU_LIB_ROOT/config/$PLUGIN_COMMAND_PREFIX"} export PLUGIN_DATA_ROOT=$MYSQL_ROOT +export PLUGIN_DATA_HOST_ROOT=$MYSQL_HOST_ROOT export PLUGIN_DATASTORE_PORTS=(3306) export PLUGIN_DATASTORE_WAIT_PORT=3306 export PLUGIN_DEFAULT_ALIAS="DATABASE" diff --git a/functions b/functions index 4b2d62a..b2134d8 100755 --- a/functions +++ b/functions @@ -65,11 +65,12 @@ service_create() { service_create_container() { local SERVICE="$1" local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + local SERVICE_HOST_ROOT="$PLUGIN_DATA_HOST_ROOT/$SERVICE" local SERVICE_NAME="$(get_service_name "$SERVICE")" local ROOTPASSWORD="$(cat "$SERVICE_ROOT/ROOTPASSWORD")" local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" - ID=$(docker run --name "$SERVICE_NAME" -v "$SERVICE_ROOT/data:/var/lib/mysql" -v "$SERVICE_ROOT/config:/etc/mysql/conf.d" -e "MYSQL_ROOT_PASSWORD=$ROOTPASSWORD" -e MYSQL_USER=mysql -e "MYSQL_PASSWORD=$PASSWORD" -e "MYSQL_DATABASE=$SERVICE" --env-file="$SERVICE_ROOT/ENV" -d --restart always --label dokku=service --label dokku.service=mysql "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION") + ID=$(docker run --name "$SERVICE_NAME" -v "$SERVICE_HOST_ROOT/data:/var/lib/mysql" -v "$SERVICE_HOST_ROOT/config:/etc/mysql/conf.d" -e "MYSQL_ROOT_PASSWORD=$ROOTPASSWORD" -e MYSQL_USER=mysql -e "MYSQL_PASSWORD=$PASSWORD" -e "MYSQL_DATABASE=$SERVICE" --env-file="$SERVICE_ROOT/ENV" -d --restart always --label dokku=service --label dokku.service=mysql "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION") echo "$ID" > "$SERVICE_ROOT/ID" dokku_log_verbose_quiet "Waiting for container to be ready" @@ -96,9 +97,10 @@ service_export() { service_import() { local SERVICE="$1" - SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" - SERVICE_NAME="$(get_service_name "$SERVICE")" - ROOTPASSWORD="$(cat "$SERVICE_ROOT/ROOTPASSWORD")" + local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + local SERVICE_NAME="$(get_service_name "$SERVICE")" + local SERVICE_HOST_ROOT="$PLUGIN_DATA_HOST_ROOT/$SERVICE" + local ROOTPASSWORD="$(cat "$SERVICE_ROOT/ROOTPASSWORD")" if [[ -t 0 ]]; then dokku_log_fail "No data provided on stdin." diff --git a/subcommands/destroy b/subcommands/destroy index abdbc65..a022b9b 100755 --- a/subcommands/destroy +++ b/subcommands/destroy @@ -16,6 +16,7 @@ service-destroy-cmd() { [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" verify_service_name "$SERVICE" SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" + SERVICE_HOST_ROOT="$PLUGIN_DATA_HOST_ROOT/$SERVICE" SERVICE_NAME="$(get_service_name "$SERVICE")" [[ -s "$LINKS_FILE" ]] && dokku_log_fail "Cannot delete linked service" @@ -50,7 +51,7 @@ service-destroy-cmd() { fi dokku_log_verbose_quiet "Removing data" - docker run --rm -v "$SERVICE_ROOT/data:/data" -v "$SERVICE_ROOT/config:/config" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" chmod 777 -R /config /data + docker run --rm -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/config:/config" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" chmod 777 -R /config /data rm -rf "$SERVICE_ROOT" dokku_log_info2 "$PLUGIN_SERVICE container deleted: $SERVICE"