本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

,因此VFAT、EXFAT、SMB/CIFS等文件系统无法与此docker镜像一起使用。
Docker:
docker 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:
services: 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用户运行,系统管理员需按以下方式初始化目标文件夹权限:
# 对于默认镜像(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手动启动备份。
以下示例脚本以运行用户身份创建一个备份,并保存到工作目录:
docker 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(数据库名):
docker exec --tty --interactive $CONTAINER /bin/sh -c "zcat $BACKUPFILE | psql --username=$USERNAME --dbname=$DBNAME -W"
替换以下命令中的$BACKUPFILE(备份文件路径)、$VERSION(postgres版本)、$HOSTNAME(主机名)、$PORT(端口)、$USERNAME(用户名)和$DBNAME(数据库名):
docker 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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429