How to move Docker containers between different hosts?

后端 未结 6 1036
借酒劲吻你
借酒劲吻你 2020-12-04 06:01

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 ? C

相关标签:
6条回答
  • 2020-12-04 06:43

    From Docker documentation:

    docker export does not export the contents of volumes associated with the container. If a volume is mounted on top of an existing directory in the container, docker export will export the contents of the underlying directory, not the contents of the volume. Refer to Backup, restore, or migrate data volumes in the user guide for examples on exporting data in a volume.

    0 讨论(0)
  • 2020-12-04 06:44

    Use this script: https://github.com/ricardobranco777/docker-volumes.sh

    This does preserve data in volumes.

    Example usage:

    # Stop the container   
    docker stop $CONTAINER
    
    # Create a new image   
    docker commit $CONTAINER $CONTAINER
    
    # Save image
    docker save -o $CONTAINER.tar $CONTAINER
    
    # Save the volumes (use ".tar.gz" if you want compression)
    docker-volumes.sh $CONTAINER save $CONTAINER-volumes.tar
    
    # Copy image and volumes to another host
    scp $CONTAINER.tar $CONTAINER-volumes.tar $USER@$HOST:
    
    # On the other host:
    docker load -i $CONTAINER.tar
    docker create --name $CONTAINER [<PREVIOUS CONTAINER OPTIONS>] $CONTAINER
    
    # Load the volumes
    docker-volumes.sh $CONTAINER load $CONTAINER-volumes.tar
    
    # Start container
    docker start $CONTAINER
    
    0 讨论(0)
  • 2020-12-04 06:50

    Alternatively, if you do not wish to push to a repository:

    1. Export the container to a tarball

      docker export <CONTAINER ID> > /home/export.tar
      
    2. Move your tarball to new machine

    3. Import it back

      cat /home/export.tar | docker import - some-name:latest
      
    0 讨论(0)
  • 2020-12-04 06:50

    I tried many solutions for this, and this is the one that worked for me :

    1.commit/save container to new image :

    1. ++ commit the container:
      # docker stop
      # docker commit CONTAINER_NAME
      # docker save --output IMAGE_NAME.tar IMAGE_NAME:TAG


    ps:"Our container CONTAINER_NAME has a mounted volume at '/var/home'" ( you have to inspect your container to specify its volume path : # docker inspect CONTAINER_NAME )

    1. ++ save its volume : we will use an ubuntu image to do the thing.
      # mkdir backup
      # docker run --rm --volumes-from CONTAINER_NAME -v ${pwd}/backup:/backup ubuntu bash -c “cd /var/home && tar cvf /backup/volume_backup.tar .”

    Now when you look at ${pwd}/backup , you will find our volume under tar format.
    Until now, we have our conatainer's image 'IMAGE_NAME.tar' and its volume 'volume_backup.tar'.

    Now you can , recreate the same old container on a new host.

    0 讨论(0)
  • 2020-12-04 06:52

    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 with docker 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.

    0 讨论(0)
  • 2020-12-04 07:01

    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:

    1. Save the docker image into archive:
      docker save image_name > image_name.tar
    2. copy on another machine
    3. on that other docker machine, run docker load in a following way:
      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).

    Needless to say is that, if you already have those ports taken on the docker hyper-visor you are doing import, by some other docker container, you will end-up in conflict, and you will have to reconfigure exposed ports.

    0 讨论(0)
提交回复
热议问题