Is it possible to backup a running Docker container? Is the export command suitable for doing that?
 
    
    - 6,716
- 6
- 41
- 54
 
    
    - 16,686
- 14
- 60
- 63
- 
                    16Hi Slava, sorry that your question was closed. For the record, Slava is talking about http://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 02 '13 at 06:35
- 
                    4@SolomonHykes One more clarification - will it yield a LVM-snapshot-like tarball or just a regular tarball with data changing during the tar? – Slava V Apr 02 '13 at 08:40
- 
                    Also have a look at https://github.com/dotcloud/docker/issues/2116 , part of the issue is discussed there – Uli Köhler Jan 04 '14 at 18:13
- 
                    Also take a look at my answer to a related question: http://stackoverflow.com/questions/27288070/is-it-safe-to-commit-a-running-container-in-docker/27289457#27289457 – RoyB Jan 07 '15 at 09:48
4 Answers
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!
 
    
    - 10,403
- 14
- 67
- 117
 
    
    - 1,169
- 1
- 12
- 22
export has some limitations: it won't export the data volume.  
Here's data volume means:
- There's a VOLUMEdefined in the image's Dockerfile.
- 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:
- Visit the data: (in a bash)
docker run -it --volumes-from target_container ubuntu bash
- 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"
 
    
    - 741
- 8
- 12
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>
 
    
    - 18,439
- 10
- 97
- 176
you can also using save and load.. here's the sample
- 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
- sudo docker save google_star/_version_1.10 > my_docker-backup.tgz
- restore it using ( - sudo docker load < my_docker-backup.tgz)
- check your images using - sudo docker imagesin your new docker machine
- 
                    10I think save/load is about **images**, but the question is about **a running container**. – semicircle21 Jan 26 '15 at 07:06
- 
                    
 
    