,因此VFAT、EXFAT、SMB/CIFS等文件系统无法与此docker镜像一起使用。
Docker:
shdocker run -u postgres:postgres -e POSTGRES_HOST=postgres -e POSTGRES_DB=dbname -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password prodrigestivill/postgres-backup-local
Docker Compose:
yamlservices: postgres: image: postgres restart: always environment: - POSTGRES_DB=database - POSTGRES_USER=username - POSTGRES_PASSWORD=password # - POSTGRES_PASSWORD_FILE=/run/secrets/db_password <-- POSTGRES_PASSWORD的替代方案(用于docker secrets) pgbackups: image: prodrigestivill/postgres-backup-local restart: always user: postgres:postgres # 可选:详见下文 volumes: - /var/opt/pgbackups:/backups links: - postgres depends_on: - postgres environment: - POSTGRES_HOST=postgres - POSTGRES_DB=database - POSTGRES_USER=username - POSTGRES_PASSWORD=password # - POSTGRES_PASSWORD_FILE=/run/secrets/db_password <-- POSTGRES_PASSWORD的替代方案(用于docker secrets) - POSTGRES_EXTRA_OPTS=-Z1 --schema=public --blobs - SCHEDULE=@daily - BACKUP_ON_START=TRUE - BACKUP_KEEP_DAYS=7 - BACKUP_KEEP_WEEKS=4 - BACKUP_KEEP_MONTHS=6 - HEALTHCHECK_PORT=8080
出于安全考虑,建议以postgres:postgres用户运行。
若以postgres用户运行,系统管理员需按以下方式初始化目标文件夹权限:
sh# 对于默认镜像(debian) mkdir -p /var/opt/pgbackups && chown -R 999:999 /var/opt/pgbackups # 对于alpine镜像 mkdir -p /var/opt/pgbackups && chown -R 70:70 /var/opt/pgbackups
大多数变量与***postgres镜像相同。
| 环境变量 | 描述 |
|---|---|
| BACKUP_DIR | 保存备份的目录。默认为/backups。 |
| BACKUP_SUFFIX | 备份文件的后缀名。默认为.sql.gz。 |
| BACKUP_ON_START | 若设为TRUE,则在容器每次启动或重启时执行备份。默认为FALSE。 |
| BACKUP_KEEP_DAYS | 保留每日备份的数量,超过则删除旧备份。默认为7。 |
| BACKUP_KEEP_WEEKS | 保留每周备份的数量,超过则删除旧备份。默认为4。 |
| BACKUP_KEEP_MONTHS | 保留每月备份的数量,超过则删除旧备份。默认为6。 |
| BACKUP_KEEP_MINS | last文件夹中备份的保留分钟数,超过则删除。默认为1440。 |
| BACKUP_LATEST_TYPE | latest指针的类型(symlink:符号链接,hardlink:硬链接,none:无)。默认为symlink。 |
| VALIDATE_ON_START | 若设为FALSE,则启动时不验证配置。不建议禁用。默认为TRUE。 |
| HEALTHCHECK_PORT | 用于cron调度健康检查的监听端口。默认为8080。 |
| POSTGRES_DB | 逗号或空格分隔的postgres数据库列表,用于指定要备份的数据库。若设置了POSTGRES_CLUSTER,此处指用于转储全局对象和发现其他应转储数据库的连接数据库(通常为postgres或template1)。必填。 |
| POSTGRES_DB_FILE | POSTGRES_DB的替代方案,每行一个数据库,用于docker secrets。 |
| POSTGRES_EXTRA_OPTS | pg_dump的额外选项(若设置POSTGRES_CLUSTER,则为pg_dumpall的选项)。默认为-Z1。 |
| POSTGRES_CLUSTER | 设为TRUE时使用pg_dumpall。此时需将POSTGRES_EXTRA_OPTS设为任意值或空,因为默认值与pg_dumpall不兼容。 |
| POSTGRES_HOST | postgres连接参数;要连接的postgres主机。必填。 |
| POSTGRES_PASSWORD | postgres连接参数;用于连接的postgres密码。必填。 |
| POSTGRES_PASSWORD_FILE | POSTGRES_PASSWORD的替代方案,用于docker secrets。 |
| POSTGRES_PASSFILE_STORE | passfile格式的POSTGRES_PASSWORD替代方案,用于postgres集群。 |
| POSTGRES_PORT | postgres连接参数;要连接的postgres端口。默认为5432。 |
| POSTGRES_USER | postgres连接参数;用于连接的postgres用户。必填。 |
| POSTGRES_USER_FILE | POSTGRES_USER的替代方案,用于docker secrets。 |
| SCHEDULE | 指定postgres备份间隔的cron调度表达式。默认为@daily。 |
| TZ | 指定用于计算SCHEDULE cron的POSIX TZ变量(例如"Europe/Paris")。 |
| WEBHOOK_URL | 备份错误或成功后调用的URL(POST请求,JSON payload,详见hooks/00-webhook文件)。默认禁用。 |
| WEBHOOK_ERROR_URL | 备份失败时调用的URL。默认禁用。 |
| WEBHOOK_PRE_BACKUP_URL | 备份开始时调用的URL。默认禁用。 |
| WEBHOOK_POST_BACKUP_URL | 备份成功完成时调用的URL。默认禁用。 |
| WEBHOOK_EXTRA_ARGS | webhook中curl执行的额外参数(详见hooks/00-webhook文件)。 |
这些变量不用于正常部署操作:
| 环境变量 | 描述 |
|---|---|
| POSTGRES_PORT_5432_TCP_ADDR | 当POSTGRES_HOST未设置时,用于设置POSTGRES_HOST。 |
| POSTGRES_PORT_5432_TCP_PORT | 当POSTGRES_HOST未设置时,用于设置POSTGRES_PORT。 |
首先,新备份会创建在last文件夹中,文件名包含完整时间。
备份成功完成后,会通过硬链接(而非复制,以避免占用更多空间)将其链接到其他文件夹(daily、weekly和monthly)。此步骤会替换该类别的旧备份,始终只保留每个类别的最新备份(因此每月备份存储的是该月的最新备份,而非第一个)。
备份文件夹结构如下:
BACKUP_DIR/last/DB-YYYYMMDD-HHmmss.sql.gz:所有备份单独存储在此文件夹中。BACKUP_DIR/daily/DB-YYYYMMDD.sql.gz:始终存储(硬链接)当天的最新备份。BACKUP_DIR/weekly/DB-YYYYww.sql.gz:始终存储(硬链接)当周的最新备份(由于使用ISO周编号,周末为周日)。BACKUP_DIR/monthly/DB-YYYYMM.sql.gz:始终存储(硬链接)当月的最新备份(通常为每月最后一天)。每次成功备份后,还会更新以下符号链接以便使用:
BACKUP_DIR/last/DB-latest.sql.gz -> BACKUP_DIR/last/DB-YYYYMMDD-HHmmss.sql.gz BACKUP_DIR/daily/DB-latest.sql.gz -> BACKUP_DIR/daily/DB-YYYYMMDD.sql.gz BACKUP_DIR/weekly/DB-latest.sql.gz -> BACKUP_DIR/weekly/DB-YYYYww.sql.gz BACKUP_DIR/monthly/DB-latest.sql.gz -> BACKUP_DIR/monthly/DB-YYYYMM.sql.gz
清理时,脚本仅在新备份成功后删除各分类的旧文件:
last文件夹中超过指定分钟数的文件(不影响其他备份,因为它们是硬链接)。daily文件夹中超过指定天数的文件。weekly文件夹中超过指定周数的文件(从每周结束开始计数,而非开始)。monthly文件夹中超过指定月数(按31天计)的文件(从每月结束开始计数,而非开始)。容器内的hooks文件夹可包含在不同情况下运行的钩子脚本,第一个参数为具体状态(error:错误,pre-backup:备份前,post-backup:备份后)。
只需在该文件夹中创建具有执行权限的脚本,run-parts会在每个状态变化时执行它。
作为示例,可查看已存在的实现WEBHOOK_URL功能的脚本。
默认情况下,容器每日执行备份,但可通过运行/backup.sh手动启动备份。
以下示例脚本以运行用户身份创建一个备份,并保存到工作目录:
shdocker run --rm -v "$PWD:/backups" -u "$(id -u):$(id -g)" -e POSTGRES_HOST=postgres -e POSTGRES_DB=dbname -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password prodrigestivill/postgres-backup-local /backup.sh
可通过-e SCHEDULE="@daily"修改SCHEDULE环境变量来更改默认备份频率,默认为daily(每日)。
调度相关更多信息可查看此处。
daily、weekly和monthly文件夹通过硬链接创建和填充,以节省磁盘空间。
以下是恢复/应用备份的示例。
要使用同一备份容器恢复,替换以下命令中的$BACKUPFILE(备份文件路径)、$CONTAINER(容器名)、$USERNAME(用户名)和$DBNAME(数据库名):
shdocker exec --tty --interactive $CONTAINER /bin/sh -c "zcat $BACKUPFILE | psql --username=$USERNAME --dbname=$DBNAME -W"
替换以下命令中的$BACKUPFILE(备份文件路径)、$VERSION(postgres版本)、$HOSTNAME(主机名)、$PORT(端口)、$USERNAME(用户名)和$DBNAME(数据库名):
shdocker run --rm --tty --interactive -v $BACKUPFILE:/tmp/backupfile.sql.gz postgres:$VERSION /bin/sh -c "zcat /tmp/backupfile.sql.gz | psql --host=$HOSTNAME --port=$PORT --username=$USERNAME --dbname=$DBNAME -W"
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429