itbm/postgresql-backup-s3用于在PostgreSQL数据库与S3存储之间进行备份和恢复操作,支持定期备份和加密功能。可通过环境变量配置实现灵活的备份策略,适用于需要将PostgreSQL数据安全存储到S3或从S3恢复的场景。
SCHEDULE环境变量)ENCRYPTION_PASSWORD)pigz替代gzip)DELETE_OLDER_THAN)sh$ docker run -e S3_ACCESS_KEY_ID=密钥 -e S3_SECRET_ACCESS_KEY=密钥 -e S3_BUCKET=我的桶 -e S3_PREFIX=backup -e POSTGRES_DATABASE=数据库名 -e POSTGRES_USER=用户名 -e POSTGRES_PASSWORD=密码 -e POSTGRES_HOST=localhost itbm/postgres-backup-s3
sh$ docker run -e S3_ACCESS_KEY_ID=密钥 -e S3_SECRET_ACCESS_KEY=密钥 -e S3_BUCKET=我的桶 -e BACKUP_FILE=backup/数据库名_0000-00-00T00:00:00Z.sql.gz -e POSTGRES_DATABASE=数据库名 -e POSTGRES_USER=用户名 -e POSTGRES_PASSWORD=密码 -e POSTGRES_HOST=localhost -e CREATE_DATABASE=yes itbm/postgres-backup-s3
注意:当提供BACKUP_FILE环境变量时,容器会自动执行恢复过程而非备份。
yamlapiVersion: v1 kind: Namespace metadata: name: backup --- apiVersion: apps/v1 kind: Deployment metadata: name: postgresql namespace: backup spec: selector: matchLabels: app: postgresql strategy: type: Recreate template: metadata: labels: app: postgresql spec: containers: - name: postgresql image: itbm/postgresql-backup-s3 imagePullPolicy: Always env: - name: POSTGRES_DATABASE value: "" - name: POSTGRES_HOST value: "" - name: POSTGRES_PORT value: "" - name: POSTGRES_PASSWORD value: "" - name: POSTGRES_USER value: "" - name: S3_ACCESS_KEY_ID value: "" - name: S3_SECRET_ACCESS_KEY value: "" - name: S3_BUCKET value: "" - name: S3_ENDPOINT value: "" - name: S3_PREFIX value: "" - name: SCHEDULE value: ""
| 变量名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| POSTGRES_DATABASE | 是 | 需备份/恢复的数据库名,或使用'all'表示备份/恢复所有数据库 | |
| POSTGRES_HOST | 是 | PostgreSQL数据库主机地址 | |
| POSTGRES_PORT | 5432 | 否 | PostgreSQL数据库端口 |
| POSTGRES_USER | 是 | PostgreSQL数据库用户名 | |
| POSTGRES_PASSWORD | 是 | PostgreSQL数据库密码 | |
| POSTGRES_EXTRA_OPTS | 否 | PostgreSQL额外选项参数 | |
| S3_ACCESS_KEY_ID | 是 | AWS访问密钥 | |
| S3_SECRET_ACCESS_KEY | 是 | AWS密钥 | |
| S3_BUCKET | 是 | AWS S3桶路径 | |
| S3_PREFIX | backup | 否 | S3桶中的路径前缀 |
| S3_REGION | us-west-1 | 否 | AWS S3桶所在区域 |
| S3_ENDPOINT | 否 | AWS S3兼容API的端点URL(如minio服务器) | |
| S3_S3V4 | no | 否 | 设置为'yes'启用AWS Signature Version 4,minio服务器需启用此选项 |
| SCHEDULE | 否 | 备份调度时间,格式参考下方说明 | |
| ENCRYPTION_PASSWORD | 否 | 用于加密/解密备份文件的密码 | |
| DELETE_OLDER_THAN | 否 | 删除指定时间前的旧备份,格式及警告见下方说明 | |
| USE_CUSTOM_FORMAT | no | 否 | 设置为'yes'使用PostgreSQL自定义格式(-Fc),而非默认纯文本压缩格式 |
| COMPRESSION_CMD | gzip | 否 | 用于压缩备份的命令(如'pigz'用于并行压缩),自定义格式时忽略 |
| DECOMPRESSION_CMD | gunzip -c | 否 | 用于解压缩备份的命令(如'pigz -dc'用于并行解压缩),自定义格式时忽略 |
| PARALLEL_JOBS | 1 | 否 | 使用自定义格式恢复时的并行任务数 |
| BACKUP_FILE | 恢复必填 | 恢复时需指定的S3备份文件路径,格式:S3_PREFIX/文件名 | |
| CREATE_DATABASE | no | 否 | 恢复时:设置为'yes'在数据库不存在时创建数据库 |
| DROP_DATABASE | no | 否 | 恢复时:设置为'yes'先删除数据库再恢复(警告:会销毁现有数据),需与CREATE_DATABASE=yes配合使用 |
通过设置SCHEDULE环境变量可实现自动定期备份,例如-e SCHEDULE="@daily"表示每日执行备份。调度格式详情可参考此处。
设置DELETE_OLDER_THAN环境变量可自动删除旧备份,例如-e DELETE_OLDER_THAN="30 days ago"表示删除30天前的备份。
警告:此操作会删除S3_PREFIX路径下的所有文件,不仅限于此脚本创建的备份文件。
设置ENCRYPTION_PASSWORD环境变量(如-e ENCRYPTION_PASSWORD="超强密码")可对备份文件加密。恢复时,若正确设置该变量,会自动检测并解密加密备份。也可手动解密:openssl aes-256-cbc -d -in backup.sql.gz.enc -out backup.sql.gz。
-e USE_CUSTOM_FORMAT=yes启用POSTGRES_DATABASE=all时不支持此格式(pg_dumpall不支持)纯文本格式默认使用gzip压缩,多核心系统可使用pigz(并行gzip)提升性能:
sh# 备份时使用pigz压缩 $ docker run ... -e COMPRESSION_CMD=pigz ... itbm/postgres-backup-s3 # 恢复时使用pigz解压缩 $ docker run ... -e DECOMPRESSION_CMD="pigz -dc" ... itbm/postgres-backup-s3
sh# 使用自定义格式备份 $ docker run ... -e USE_CUSTOM_FORMAT=yes ... itbm/postgres-backup-s3 # 使用自定义格式并行恢复(4个并行任务) $ docker run ... -e PARALLEL_JOBS=4 -e BACKUP_FILE=backup/dbname_0000-00-00T00:00:00Z.dump ... itbm/postgres-backup-s3
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务