| 123456789101112131415161718192021222324252627282930313233343536373839 |
- #!/bin/bash
- # Usage: ./convert_bind_to_named_volume.sh <container_name> <bind_mount_path> <named_volume>
- # 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 <container_name> <bind_mount_path> <named_volume>"
- 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"
|