定时使用 sftp 将远程服务器的文件或文件夹备份到本地
sudo docker run -d --rm \
--name cron-backup \
-e HOST=host_ip \
-e SSH_PORT=22 \
-e SSH_USER=user \
-e SSH_PASSWD=secret_passwd \
-e SYNC_FILES=file1:file1_bak,file2:file2_bak \
-e SYNC_FOLDERS=folder1:folder1_bak,folder2:folder2_bak,folder3:folder3_bak \
-e MAX_BACKUPS=7 \
-e INIT_BACKUP=1 \
-e INIT_BACKUP_TIMEOUT=5 \
-e CRON_TIME='0 4 * * *' \
-v ./backups/:/root/backups/ \
-v ./sync/:/root/sync/ \
-v ./log/:/var/log/ \
cstao/cron-backup:v1.0.0docker-compose.yml
version: '3.5'
services:
cron-backup:
image: cstao/cron-backup:v1.0.0
container_name: cron-backup
restart: unless-stopped
volumes:
- ./backups/:/root/backups/
- ./sync/:/root/sync/
- ./log/:/var/log/
environment:
HOST: host_ip
SSH_PORT: 22
SSH_USER: user
SSH_PASSWD: secret_passwd
SYNC_FILES: file1:file1_bak,file2:file2_bak
SYNC_FOLDERS: folder1:folder1_bak,folder2:folder2_bak,folder3:folder3_bak
MAX_BACKUPS: 7
INIT_BACKUP: 1
INIT_BACKUP_TIMEOUT: 5
CRON_TIME: '0 4 * * *'HOST:主机 IP, 默认为localhostSSH_PORT:ssh 端口, 默认为22SSH_USER:ssh 用户, 默认为rootSSH_PASSWD:ssh 密码,不可为空SYNC_FILES:需要备份的文件,以英文冒号隔开远程路径和本地路径,以英文逗号隔开不同文件,不能有空格,如 file1:file1_bak,file2:file2_bak。冒号前的文件为服务器上的文件绝对路径,冒号后的文件为在./sync/文件夹中的名字SYNC_FOLDERS:需要备份的文件夹,以英文冒号隔开远程路径和本地路径,以英文逗号隔开不同文件夹,不能有空格,如 folder1:folder1_bak,folder2:folder2_bak。冒号前的文件夹为服务器上的文件绝对路径,冒号后的文件夹路径为文件夹在./sync/文件夹中的路径MAX_BACKUPS:最大备份数量,即 backup 文件夹中压缩包的数量,默认为10INIT_BACKUP:每次启动容器是否需要备份一次,数字大于 0 表示需要,默认为空,即每次启动容器时不执行备份INIT_BACKUP_TIMEOUT:第一次备份等待时间(s),仅在INIT_BACKUP大于 0 时有效,默认为0CRON_TIME:定时表达式,默认为0 4 * *,即每天 4 点执行备份
SSH_PASSWD不可为空,SYNC_FILES和SYNC_FOLDERS不可同时为空
/root/backups/:备份文件夹,保存每次/root/sync/文件夹的压缩包/root/sync/:同步文件夹,每次同步会清空之前的内容并下载最新内容/var/log/:日志文件夹
-
备份文件和文件夹的命令
docker exec cron-backup /root/backup.sh -
恢复文件和文件夹的命令
docker exec cron-backup /root/restore.sh