Docker Volumes umziehen

Auch wenn sich viel Technik hinter Docker durch Programme wie Portainer verstecken lässt, so muss man für den Umzug von Volumes doch selber Hand anlegen.

Hier beschreibe ich den Umzug von Docker Volumes unter Docker Version 29 von einer Debian 12 Maschine zu einer anderen.

Volumes finden

Alle Volumes auf dem alten System anzeigen lassen:

docker volume ls
DRIVER    VOLUME NAME
local     registry_registry_data

Speicherort finden

Den Speicherort des Volumes herausfinden:

docker inspect registry_registry_data

[
    {
        "CreatedAt": "2023-12-20T18:49:46Z",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "registry",
            "com.docker.compose.version": "2.20.2",
            "com.docker.compose.volume": "registry_data"
        },
        "Mountpoint": "/var/lib/docker/volumes/registry_registry_data/_data",
        "Name": "registry_registry_data",
        "Options": null,
        "Scope": "local"
    }
]

Speicherort finden

Den Container beenden, falls z.B. eine Datenbank läuft die erst auf das Dateisystem zurückgeschrieben werden muss.

 docker stop registry

Kopieren

Den Inhalt des Volumes kopieren:

scp -r /var/lib/docker/volumes/registry_registry_data root@new_docker_host:/var/lib/docker/volumes/

Symlinks

Enthält das Volume Symlinks, so schlägt der Kopiervorgang fehl:

scp: open local "/var/lib/docker/volumes/registry_registry_data/_data/symlinked_file": No such file or directory

In diesem Fall hilft uns rsync die symlinks zu kopieren:

rsync -avz -e ssh /var/lib/docker/volumes/registry_registry_data/ root@new_docker_host:/var/lib/docker/volumes/registry_registry_data