Actually it should be done same way as written in official documentation. Data volume container stores it's data in "virtual root", so you should backup with next command:
docker run --rm \
--volume [DOCKER_COMPOSE_PREFIX]_[VOLUME_NAME]:/[TEMPORARY_DIRECTORY_TO_STORE_VOLUME_DATA] \
--volume $(pwd):/[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE] \
ubuntu \
tar cvf /[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE]/[BACKUP_FILENAME].tar /[TEMPORARY_DIRECTORY_TO_STORE_VOLUME_DATA]
where:_
- --rm means that the image created for this run command will be cleaned up
- DOCKER_COMPOSE_PREFIX in default is your project directory name
- VOLUME_NAME is the data-volume container name from compose file
- TEMPORARY_DIRECTORY_TO_STORE_VOLUME_DATA is a directory to mount your volume data
- TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE is a directory virtually mapped to your current directory, where the backup will be placed
- BACKUP_FILENAME - a name of backup file (you find it in current directory)
- ubuntu - you may change image type to another container with tar :)
Example:
docker run --rm --volume mariadb_my-db:/v_data --volume %cd%:/backup ubuntu tar cvf /backup/backup.tar /v_data
docker run --rm \
--volume [DOCKER_COMPOSE_PREFIX]_[VOLUME_NAME]:/[TEMPORARY_DIRECTORY_STORING_EXTRACTED_BACKUP] \
--volume $(pwd):/[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE] \
ubuntu \
tar xvf /[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE]/[BACKUP_FILENAME].tar -C /[TEMPORARY_DIRECTORY_STORING_EXTRACTED_BACKUP] --strip 1
where:
- TEMPORARY_DIRECTORY_STORING_EXTRACTED_BACKUP is a directory where the extracted files will be copied to (this is linked with the volume and will therefore write to it)
- -C - tell tar where to extract the contents
- --strip 1 - remove leading path elements (e.g. the parent directory if the backup contents are located in a /temp folder or similar)
Example:
docker run --rm --volume mariadb_my-db:/var/lib/mysql --volume %cd%:/backup ubuntu tar xvf /backup/backup.tar -C /var/lib/mysql --strip 1