PostgreSQL容器实现WAL归档增量备份遇权限问题求助
解决PostgreSQL容器WAL归档权限问题(无需修改基础镜像)
方案1:挂载到PostgreSQL默认有权限的目录
官方PostgreSQL基础镜像中,postgres用户默认对/var/lib/postgresql目录拥有写入权限(这是镜像预设的用户主目录及数据目录所在路径)。你可以将宿主机的备份目录挂载到该路径下的子目录,而非/var/backups:
- 启动容器时调整挂载路径:
docker run -v /宿主机的备份目录:/var/lib/postgresql/backups [其他postgres镜像参数]
- 修改
postgresql.conf中的archive_command,将归档路径指向这个有权限的目录:
archive_command ='DIR="/var/lib/postgresql/backups/$(date +%Y%m%d)-wal"; (test -d "$DIR" || mkdir -p "$DIR") && gzip < "%p" > "$DIR/%f.gz"'
方案2:调整宿主机备份目录的权限
官方PostgreSQL镜像中postgres用户的UID固定为999,你可以在宿主机上直接修改备份目录的权限,让容器内的postgres用户拥有写入权限,无需修改镜像:
- 在宿主机执行权限修改命令:
chown 999:999 /宿主机的备份目录
- 保持原挂载路径(
/var/backups)和archive_command不变,重新启动容器后,postgres用户即可正常写入归档文件。
注意事项
- 避免使用
/tmp目录存储归档文件:虽然postgres用户对其有写入权限,但容器重启后/tmp会被清空,导致备份丢失。 - 若使用Docker Compose,只需在
volumes配置中对应调整挂载路径,或提前在宿主机设置好目录权限。
内容的提问来源于stack exchange,提问作者Vincent Adams
相关产品推荐
相关产品推荐

