docker move to other host
docker move to other host

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:

  • tar compresses volume data
  • _data contains 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.tar
  • volume 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.