bin2named.sh 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/bin/bash
  2. # Usage: ./convert_bind_to_named_volume.sh <container_name> <bind_mount_path> <named_volume>
  3. # Example: ./convert_bind_to_named_volume.sh mycontainer /data my_named_volume
  4. set -e
  5. CONTAINER="$1"
  6. BIND_PATH="$2"
  7. NAMED_VOL="$3"
  8. if [[ -z "$CONTAINER" || -z "$BIND_PATH" || -z "$NAMED_VOL" ]]; then
  9. echo "Usage: $0 <container_name> <bind_mount_path> <named_volume>"
  10. exit 1
  11. fi
  12. # Create the named volume if it doesn't exist
  13. docker volume create "$NAMED_VOL"
  14. # Copy data from the bind mount to a temporary location
  15. TMPDIR=$(mktemp -d)
  16. docker cp "$CONTAINER:$BIND_PATH/." "$TMPDIR"
  17. # Stop and remove the old container
  18. docker stop "$CONTAINER"
  19. docker rm "$CONTAINER"
  20. # Start a temporary container to copy data into the named volume
  21. docker run --rm -v "$NAMED_VOL":/vol -v "$TMPDIR":/from busybox sh -c "cp -a /from/. /vol/"
  22. echo "Data copied to named volume: $NAMED_VOL"
  23. echo "Now recreate your container, replacing:"
  24. echo " -v /host/path:$BIND_PATH"
  25. echo "with:"
  26. echo " -v $NAMED_VOL:$BIND_PATH"
  27. # Clean up
  28. rm -rf "$TMPDIR"