I cannot find a way of moving docker running containers from one host to another.
Is there any way I can push my containers to repositories like we do for images ? Currently, I am not using data volumes to store the data associated with applications running inside containers. So some data resides inside containers, which I want to persist before redesigning the setup.
What eventually worked for me, after lot's of confusing manuals and confusing tutorials, since Docker is obviously at time of my writing at peek of inflated expectations, is:
docker save image_name > image_name.tar
cat image_name.tar | docker load
Export and import, as proposed in another answers does not export ports and variables, which might be required for your container to run. And you might end up with stuff like "No command specified" etc... When you try to load it on another machine.
So, difference between save and export is that save command saves whole image with history and metadata, while export command exports only files structure (without history or metadata).
You cannot move a running docker container from one host to another.
You can commit the changes in your container to an image with
docker commit
, move the image onto a new host, and then start a new container withdocker run
. This will preserve any data that your application has created inside the container.Nb: It does not preserve data that is stored inside volumes; you need to move data volumes manually to new host.
alternatively, if you do not wish to push to a repository:
1) Export the container to a tarball
2) Move your tarball to new machine
3) Import it back
Use this script: https://github.com/ricardobranco777/docker-volumes.sh
This does preserve data in volumes.
Example usage:
From Docker documentation:
Other external tools: In order to move a container with its associated data volume you can use Flocker https://clusterhq.com/flocker/introduction/