Skip to content

The docker-export and docker-commit commands do not save the container volumes. Use this script to save and load the container volumes.

License

Notifications You must be signed in to change notification settings

iamfaith/docker-volumes.sh

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

docker-volumes.sh

The docker export and docker commit commands do not save the container volumes. Use this script to save and load the container volumes.

Usage

docker-volumes.sh [-v|--verbose] CONTAINER [save|load] TARBALL

Podman

To use Podman instead of Docker, prepend DOCKER=podman to the command line to set the DOCKER environment variable.

Example

Let's migrate a container to another host with all its volumes.

# Stop the container 
docker stop $CONTAINER
# Create a new image
docker commit $CONTAINER $CONTAINER
# Save and load image to another host
docker save $CONTAINER | ssh $USER@$HOST docker load 

# Save the volumes (use ".tar.gz" if you want compression)
docker-volumes.sh $CONTAINER save $CONTAINER-volumes.tar

# Copy volumes to another host
scp $CONTAINER-volumes.tar $USER@$HOST:

### On the other host:

# Create container with the same options used in the previous container
docker create --name $CONTAINER [<PREVIOUS CONTAINER OPTIONS>] $CONTAINER

# Load the volumes
docker-volumes.sh $CONTAINER load $CONTAINER-volumes.tar

# Start container
docker start $CONTAINER

Notes

  • This script could have been written in Python or Go, but the tarfile module and the tar package lack support for writing sparse files.
  • We use the Ubuntu 22.04 Docker image with GNU tar v1.29 that uses SEEK_DATA/SEEK_HOLE to manage sparse files.
  • To see the volumes that would be processed run docker container inspect -f '{{json .Mounts}}' $CONTAINER and pipe it to either jq or python -m json.tool.

Bugs / Features

  • Make sure the volumes are defined as such with the VOLUME directive. For example, the Apache image lacks them, but you can add them manually with docker commit --change 'VOLUME /usr/local/apache2/htdocs' $CONTAINER $CONTAINER

About

The docker-export and docker-commit commands do not save the container volumes. Use this script to save and load the container volumes.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 100.0%