因为家里服务器配置太老了,想装memos,就得买一台新的服务器,一年买一次,每年都要备份,迁移操作。把手动搬迁方法记录一下。

  1. 定位数据存储位置(两种情形):
1
2
3
4
5
6
# 查看容器挂载信息(替换容器名)
docker inspect memos | grep "Mounts" -A 20

# 若使用数据卷:
docker volume ls
docker volume inspect memos_data
  1. 手动备份方案:
1
2
3
4
5
# 直接打包备份(推荐方式)
docker exec memos sh -c 'tar czf - /var/opt/memos' > memos_backup_$(date +%Y%m%d).tar.gz

# 仅备份数据库文件(SQLite方案)
docker cp memos:/var/opt/memos/memos_prod.db ./memos_db_$(date +%Y%m%d).db
  1. 自动备份脚本(保存为 backup_memos.sh):
1
2
3
4
5
6
7
8
#!/bin/bash
BACKUP_DIR=/path/to/backups
CONTAINER_NAME=memos

docker exec $CONTAINER_NAME sqlite3 /var/opt/memos/memos_prod.db ".backup '/var/opt/memos/memos_backup.db'"
docker cp $CONTAINER_NAME:/var/opt/memos/memos_backup.db $BACKUP_DIR/memos_$(date +%Y-%m-%d).db
gzip $BACKUP_DIR/memos_$(date +%Y-%m-%d).db
find $BACKUP_DIR -name "*.db.gz" -mtime +7 -delete
  1. Docker Compose用户专用方案:
1
2
3
4
5
6
version: '3.8'
services:
memos:
image: neosmemo/memos:latest
volumes:
- ./memos_data:/var/opt/memos # 绑定宿主目录

备份命令:
tar czvf memos_backup.tar.gz ./memos_data
5. 恢复数据指南:

1
2
3
4
5
6
7
8
9
10
11
12
# 停止容器
docker stop memos

# 全量恢复
docker cp memos_backup.tar.gz memos:/tmp/
docker exec memos tar xzvf /tmp/memos_backup.tar.gz -C /

# 或单文件恢复
docker cp ./memos_prod.db memos:/var/opt/memos/memos_prod.db

# 重启容器
docker start memos