services: database: image: mariadb:10.7 deploy: restart_policy: condition: on-failure placement: constraints: - node.hostname == worker1 environment: MARIADB_ROOT_PASSWORD: test MARIADB_DATABASE: backup labels: - docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -ptest --all-databases > /tmp/volume/dump.sql' - docker-volume-backup.copy-post=/bin/sh -c 'echo "post" > /tmp/volume/post.txt' - docker-volume-backup.stop-during-backup=true volumes: - app_data:/tmp/volume other_database: image: mariadb:10.7 deploy: placement: constraints: - node.hostname == manager restart_policy: condition: on-failure environment: MARIADB_ROOT_PASSWORD: test MARIADB_DATABASE: backup labels: - docker-volume-backup.archive-pre=touch /tmp/volume/not-relevant.txt - docker-volume-backup.exec-label=not-relevant volumes: - app_data:/tmp/volume backup: image: offen/docker-volume-backup:${TEST_VERSION:-canary} deploy: restart_policy: condition: on-failure placement: constraints: - node.hostname == worker1 environment: BACKUP_FILENAME: test.tar.gz BACKUP_CRON_EXPRESSION: 0 0 5 31 2 ? EXEC_FORWARD_OUTPUT: "true" volumes: - backup_archive:/archive - app_data:/backup/data:ro - /var/run/docker.sock:/var/run/docker.sock:ro volumes: app_data: backup_archive: