BACKUP_DIR='/docker/backup' ALL_CONTAINER=$(docker ps --format '{{.Names}}') ALL_PROJECTS=$(for i in $ALLCONTAINER; do docker inspect --format '{{ index .Config.Labels "com.docker.compose.project.working_dir"}}' $i; done | sort -u) EXPORT_DIR='./export' for project in $ALL_PROJECTS; do PROJECT_NAME=${project##*/} #todo loop read -p "Stop docker $PROJECT_NAME (y/n)?" choice case "$choice" in y|Y ) docker stop $PROJECT_NAME;; n|N ) continue;; * ) echo "invalid";; esac mkdir $EXPORT_DIR/$PROJECT_NAME echo "Exporting docker-compose.yml" cp $project/docker-compose.yml $EXPORT_DIR/$PROJECT_NAME ALL_IMAGES="todo" for j in $ALL_IMAGES; do #save ALL_VOLUMES=$(docker inspect -f '{{index .Mounts 0}}' $j) for k in $ALL_VOLUMES; do #save done done docker start $PROJECT_NAME #zip everything done ALL_CONTAINER=$(docker ps --format '{{.Names}}') ALL_PROJECTS=$(for i in $ALL_CONTAINER; do docker inspect --format '{{ index .Config.Labels "com.docker.compose.project.working_dir"}}' $i; done | sort -u) EXPORT_DIR='./export' for project in $ALL_PROJECTS; do PROJECT_NAME=${project##*/} echo -e '\n project: '$project # all images while read -r image; do echo 'img: '$image done < <(grep -Po "(?<=image: ).*$" $project/docker-compose.yml) # all container name while read -r name; do echo 'container: '$name while read -r volume; do echo "vol: "$volume done < <(docker inspect --format="{{.Mounts}}" $name | grep '[\{.+\}]*') done < <(grep -Po '(?<=container_name: ).*$' $project/docker-compose.yml) done # test multi volumes # postgres # jisti using config env docker inspect --format="{{.Mounts}}" synapse [{bind /etc/localtime /etc/localtime ro false rprivate} {volume nextcloud_nextcloud /var/lib/docker/volumes/nextcloud_nextcloud/_data /var/www/html local rw true } {bind /docker/nextcloud/app/config /var/www/html/config rw true rprivate} {bind /docker/nextcloud/app/custom_apps /var/www/html/custom_apps rw true rprivate} {bind /media/nextcloud /var/www/html/data rw true rprivate} {bind /docker/nextcloud/app/themes /var/www/html/themes rw true rprivate}]