When moving Docker workloads to a new server, one essential task is ensuring all Docker-related data is transferred. This includes container configurations, images, and volumes. Docker volumes store persistent data that containers use, making them crucial for smooth application migrations.
In this guide, we’ll walk you through migrating all Docker files—including volumes, images, and containers—between servers using rsync
. We’ll also cover how to install rsync
, ensure it’s available on both systems, and resolve sudo
password issues. Remember to always backup when doing things like this.
sudo
privileges on both servers.rsync
on Both ServersFirst, ensure rsync
is installed on both servers. Use the following commands:
sudo apt update
sudo apt install rsync
sudo yum install rsync
sudo dnf install rsync
To prevent data inconsistencies during migration, stop Docker on both the source and destination servers:
sudo systemctl stop docker
Docker volumes are typically stored in /var/lib/docker/volumes
. If you need to find the locations of volumes use this command sudo docker inpect <container-name or ID> | grep -i source
.
Use the following command to migrate volumes from the source server to the destination server:
sudo rsync -aP --rsync-path="sudo rsync" user@source-server:/var/lib/docker/volumes/ /var/lib/docker/volumes/
Here’s what the options mean:
-a
: Preserve file permissions and timestamps.-P
: Show progress and allow resuming of partial transfers.--rsync-path="sudo rsync"
: Run rsync
as sudo
on the source server to access protected directories.To transfer Docker images and containers, you need to back up the entire /var/lib/docker
directory:
sudo rsync -aP --rsync-path="sudo rsync" user@source-server:/var/lib/docker/ /var/lib/docker/
This command copies all Docker data, including images, container metadata, and volumes. If you’ve already migrated volumes, you can exclude them:
sudo rsync -aP --rsync-path="sudo rsync" --exclude="volumes" user@source-server:/var/lib/docker/ /var/lib/docker/
After transferring the files, ensure proper ownership and permissions on the destination server:
sudo chown -R root:root /var/lib/docker
Start Docker on both servers to ensure everything is working correctly:
sudo systemctl start docker
Verify that your containers and volumes are accessible on the destination server:
docker ps -a
docker volume ls
sudo
Password PromptsIf you encounter issues with sudo
requiring a password during rsync
, configure passwordless sudo
for rsync
on the source server:
sudoers
file on the source server:sudo visudo
user
with your username:user ALL=(ALL) NOPASSWD: /usr/bin/rsync
This allows rsync
to run with sudo
privileges without prompting for a password.
Using rsync
is an efficient way to migrate all Docker files, including volumes, images, and container data, between servers. With the steps outlined in this guide, you can ensure a smooth transition for your Docker workloads.