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
    5
    ·
    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.

    In general, it’s not a problem to back up files while the container is running. The exception to this is databases. To have reliable database backups, you need to stop the container (or quiesce/pause the database if it supports it) before backing up the raw database files (including SQLite).

    • MaggiWuerze@feddit.de
      link
      fedilink
      arrow-up
      1
      ·
      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
    2
    ·
    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.

  • 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