docker备份 named volume

最近docker出了问题,要重装,但重装可能会导致codimd的volume受到损失,故需要备份,其docker-compose文件如下:

version: "3"
services:
  database:
    image: postgres:11.6-alpine
    environment:
      - POSTGRES_USER=codimd
      - POSTGRES_PASSWORD=codimd
      - POSTGRES_DB=codimd
    volumes:
      - "database-data:/var/lib/postgresql/data"
    expose:
      - "5432"
    restart: always
  codimd:
    image: nabo.codimd.dev/hackmdio/hackmd:2.0.0
    environment:
      - CMD_DB_URL=postgres://codimd:codimd@database/codimd
      - CMD_USECDN=false
    depends_on:
      - database
    ports:
      - "3002:3000"
    volumes:
      - upload-data:/home/hackmd/app/public/uploads
    restart: always
volumes:
  database-data: {}
  upload-data: {}

需要注意的是,其中映射的文件目录/var/lib/postgresql/data和/home/hackmd/app/public/uploads分别对应的是named volume也就是database-data和upload-data。这两个volume比较特殊,被称为named volume在硬盘上是没有对应的文件目录的,也就很难通过拷贝目录的方式备份。
解决方法参考了这个:https://stackoverflow.com/questions/38298645/how-should-i-backup-restore-docker-named-volumes
这里我做了个实用小工具docker_named_volume_backup,项目地址为https://github.com/fjh1997/docker_named_volume_backup。
使用方法很简单:
首先列出你想备份的镜像:

sudo docker volume ls

docker备份 named volume_第1张图片
可以看到我想备份的是codimd_database-data和codimd_upload-data
之后下载我的小工具。

git clone https://github.com/fjh1997/docker_named_volume_backup.git
cd docker_named_volume_backup

备份:

#sudo backup_docker_volume.sh  
sudo bash ./backup_docker_volume.sh codimd_database-data backup1.tar

恢复:

#sudo restore_docker_volume.sh  
sudo bash ./restore_docker_volume.sh codimd_database-data backup1.tar

你可能感兴趣的:(docker备份 named volume)