#!/bin/bash # Usage: ./convert_bind_to_named_volume.sh # Example: ./convert_bind_to_named_volume.sh mycontainer /data my_named_volume set -e CONTAINER="$1" BIND_PATH="$2" NAMED_VOL="$3" if [[ -z "$CONTAINER" || -z "$BIND_PATH" || -z "$NAMED_VOL" ]]; then echo "Usage: $0 " exit 1 fi # Create the named volume if it doesn't exist docker volume create "$NAMED_VOL" # Copy data from the bind mount to a temporary location TMPDIR=$(mktemp -d) docker cp "$CONTAINER:$BIND_PATH/." "$TMPDIR" # Stop and remove the old container docker stop "$CONTAINER" docker rm "$CONTAINER" # Start a temporary container to copy data into the named volume docker run --rm -v "$NAMED_VOL":/vol -v "$TMPDIR":/from busybox sh -c "cp -a /from/. /vol/" echo "Data copied to named volume: $NAMED_VOL" echo "Now recreate your container, replacing:" echo " -v /host/path:$BIND_PATH" echo "with:" echo " -v $NAMED_VOL:$BIND_PATH" # Clean up rm -rf "$TMPDIR"