mirror of
https://github.com/kevinveenbirkenbach/docker-volume-backup.git
synced 2026-07-17 14:15:13 +00:00
refactor(restore)!: restore volume files via direct host rsync
Drop the alpine-rsync helper image: resolve the volume mountpoint with docker volume inspect and rsync the backup straight into it. Removes the --rsync-image flag and the E2E_RSYNC_IMAGE pre-pull; the e2e test container now mounts /var/lib/docker rw so the direct restore can write. BREAKING CHANGE: the restore 'files' subcommand no longer accepts --rsync-image; rsync must be available on the host running baudolo. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,12 +3,10 @@ from __future__ import annotations
|
||||
import os
|
||||
import sys
|
||||
|
||||
from .run import run, docker_volume_exists
|
||||
from .run import docker_volume_exists, run
|
||||
|
||||
|
||||
def restore_volume_files(
|
||||
volume_name: str, backup_files_dir: str, *, rsync_image: str
|
||||
) -> int:
|
||||
def restore_volume_files(volume_name: str, backup_files_dir: str) -> int:
|
||||
if not os.path.isdir(backup_files_dir):
|
||||
print(f"ERROR: backup files dir not found: {backup_files_dir}", file=sys.stderr)
|
||||
return 2
|
||||
@@ -19,21 +17,21 @@ def restore_volume_files(
|
||||
else:
|
||||
print(f"Volume {volume_name} already exists.")
|
||||
|
||||
# Keep behavior close to the old script: rsync -avv --delete
|
||||
run(
|
||||
[
|
||||
"docker",
|
||||
"run",
|
||||
"--rm",
|
||||
"-v",
|
||||
f"{volume_name}:/recover/",
|
||||
"-v",
|
||||
f"{backup_files_dir}:/backup/",
|
||||
rsync_image,
|
||||
"sh",
|
||||
"-lc",
|
||||
"rsync -avv --delete /backup/ /recover/",
|
||||
]
|
||||
cp = run(
|
||||
["docker", "volume", "inspect", "--format", "{{ .Mountpoint }}", volume_name],
|
||||
capture=True,
|
||||
)
|
||||
raw = cp.stdout or b""
|
||||
mountpoint = (raw.decode() if isinstance(raw, bytes) else raw).strip()
|
||||
if not mountpoint:
|
||||
print(
|
||||
f"ERROR: could not resolve mountpoint for volume {volume_name}",
|
||||
file=sys.stderr,
|
||||
)
|
||||
return 2
|
||||
|
||||
src = os.path.join(backup_files_dir, "")
|
||||
dest = os.path.join(mountpoint, "")
|
||||
run(["rsync", "-avv", "--delete", src, dest])
|
||||
print("File restore complete.")
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user