Hi all

I’m running several docker containers with local persistent volumes that I would like to backup. I haven’t found an easy method to do so.

What do you use / recommend to do that? AFAIK you can’t just rsync the volume directory while the container is running.

  • outcide@kbin.social
    link
    fedilink
    arrow-up
    8
    ·
    1 year ago

    Use bind mounts instead of docker volumes. Then you just have normal directories to back up, the same as you would anything else.

    • MaggiWuerze@feddit.de
      link
      fedilink
      arrow-up
      2
      ·
      1 year ago

      This is your answer. It also has the benefit of allowing you to have a nice folder structure for your Docker setup, where you have a folder for each service holding the corresponding compose yaml and data folder(s)

  • Ruud@lemmy.worldM
    link
    fedilink
    arrow-up
    4
    ·
    1 year ago

    Rsync works fine for most data. (I use borgbackup) For any database data, create a dump using pg_dump or mysqldump or whatever. Then backup the dump and all other volumes but exclude the db volume.

  • PhilipA
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    Besides using bind mounts(As @outcide@kbin.social) mentions, you can run a backup container, that mounts the volume, that you would like to create a backup for. The backup container would handle backing up the volume at regular interval.

    This is what I do in thedocker-compose and k3s containers I backup. I can recommend autorestic as the container for backup, but there is a lot of options.

  • easeKItMAn@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    Bind mounts are easy to maintain and backup. However if you share data amongst multiple container docker volumes are recommend especially for managing state.

    Backup volumes:

    docker run --rm --volumes-from dbstore -v $(pwd):/backup containername tar cvf /backup/backup.tar /dbdata

    • Launch a new container and mount the volume from the dbstore container
    • Mount a local host directory as /backup
    • Pass a command that tars the contents of the dbdata volume to a backup.tar file inside /backup directory.

    docker docs - volumes

    Database volume backup without stopping the service: bash into the container, dump it, and copy it out with docker cp. Run it periodically via crontab