Backup a running Docker container?
Asked Answered
H

4

62

Is it possible to backup a running Docker container? Is the export command suitable for doing that?

Heliograph answered 29/3, 2013 at 9:54 Comment(4)
Hi Slava, sorry that your question was closed. For the record, Slava is talking about docker.io, a runtime for linux containers. Yes, 'docker export' is a suitable approach. It will generate a tarball of your entire container filesystem state, and dump it on stdout. So "docker export $CONTAINER_ID > $CONTAINER_ID-backup.tar" will yield a usable tarball. You can re-import the tarball with "docker import - slava/$CONTAINER_ID-backup < $CONTAINER_ID-backup.tar" Note the original metadata (eg id of the original image) will be lost. This should be fixed in future versions of docker.Compensate
@SolomonHykes One more clarification - will it yield a LVM-snapshot-like tarball or just a regular tarball with data changing during the tar?Heliograph
Also have a look at github.com/dotcloud/docker/issues/2116 , part of the issue is discussed thereParamo
Also take a look at my answer to a related question: #27288570Loring
G
44

Posted by one friend in comments

Hi Slava, sorry that your question was closed. For the record, Slava is talking about docker.io, a runtime for linux containers. Yes, docker export is a suitable approach. It will generate a tarball of your entire container filesystem state, and dump it on stdout. So

docker export $CONTAINER_ID > $CONTAINER_ID-backup.tar

will yield a usable tarball. You can re-import the tarball with

docker import - slava/$CONTAINER_ID-backup < $CONTAINER_ID-backup.tar

Note the original metadata (eg id of the original image) will be lost. This should be fixed in future versions of docker. – Solomon Hykes Apr 2 '13 at 6:35

Adding here so one can find from summary that question was answered. Thanks Solomon!

Gantline answered 24/1, 2014 at 3:28 Comment(0)
T
9

export has some limitations: it won't export the data volume.

Here's data volume means:

  1. There's a VOLUME defined in the image's Dockerfile.
  2. The container is start with a parameter like this: -v /webapp

More about data: https://docs.docker.com/userguide/dockervolumes/

The way to handle this situation is start a new container with '--volumes-from' parameter to hook on that container, so you can visit the data volume.

Examples:

  1. Visit the data: (in a bash)

docker run -it --volumes-from target_container ubuntu bash

  1. Backup to host: (a postgres container)

docker run -it --volumes-from some_postgres -v /host/path:/container/path --rm ubuntu bash -c "tar -cvf /container/path/postgres-backup.tar /var/lib/postgresql/data"

Theurer answered 26/1, 2015 at 7:4 Comment(0)
E
1

Using the docker commit is my preferred way to back up a container (started or stopped). Creates an image that you can name:

docker commit - p <container_id> <backup-name>
Extirpate answered 12/12, 2018 at 0:42 Comment(0)
B
-2

you can also using save and load.. here's the sample

  1. sudo docker images

    awan@google-dev:~/StarCenter/_docker$ sudo docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    google_star/_version_1.10           latest              1067d6689697b2        4 days ago          1.666 GB
    
  2. sudo docker save google_star/_version_1.10 > my_docker-backup.tgz

  3. restore it using (sudo docker load < my_docker-backup.tgz)

  4. check your images using sudo docker images in your new docker machine

Betty answered 19/1, 2015 at 8:54 Comment(2)
I think save/load is about images, but the question is about a running container.Theurer
I have save/load db image but when I load it, there wasn't any table.Monosome

© 2022 - 2024 — McMap. All rights reserved.