Docker: Move to Other Host
Overview
This process explains how to migrate Docker containers, images, and volumes from one Linux server (source host) to another server (destination host).
You can move:
- Docker images
- Container data (volumes)
- Container configuration
- Docker Compose projects
Migration Workflow
Old Host → Export → Transfer → Import → Recreate Containers
Step-by-Step Explanation
1. Check Docker Resources on Source Host
View all containers:
docker ps -a
View images:
docker images
View volumes:
docker volume ls
This helps identify what needs to be migrated.
2. Export Docker Images
Save Docker images into a .tar file.
Example:
docker save -o images.tar nginx:latest mysql:8
Or export all images:
docker save -o all-images.tar $(docker images -q)
Result:
images.tar
contains all image layers.
3. Backup Docker Volumes (Container Data)
Docker volumes usually store important data such as:
- Databases
- Uploads
- Application files
Create backup folder:
mkdir -p /backup/volumes
Backup example volume:
sudo tar -czvf /backup/volumes/mysql_data.tar.gz \
-C /var/lib/docker/volumes/mysql_data/_data .
Explanation:
tarcompresses volume data_datacontains actual volume files
Repeat for other volumes if needed.
4. Transfer Files to New Host
You can transfer files using:
Option A — SCP (Network)
scp images.tar user@new-host:/tmp/
scp -r /backup/volumes user@new-host:/tmp/
Option B — Rsync
rsync -avz /backup/volumes user@new-host:/tmp/
Option C — USB / External Drive
Copy:
images.tarvolume backups
to external storage and move them manually.
5. Import Docker Images on Destination Host
Load images:
docker load -i /tmp/images.tar
Verify:
docker images
6. Restore Docker Volumes
Create Docker volume directory:
sudo mkdir -p /var/lib/docker/volumes/mysql_data/_data
Restore backup:
sudo tar -xzvf /tmp/volumes/mysql_data.tar.gz \
-C /var/lib/docker/volumes/mysql_data/_data
Important:
- Volume name should match original container configuration.
7. Recreate Containers
Using Docker Run
Example:
docker run -d \
--name mysql \
-v mysql_data:/var/lib/mysql \
-p 3306:3306 \
mysql:8
Using Docker Compose (Recommended)
Example:
docker-compose up -d
If you already have:
docker-compose.yml
migration becomes much easier.
8. Verify Migration
Check containers:
docker ps -a
Check logs:
docker logs <container_name>
Check volumes:
docker volume ls
Verify applications are working correctly.
