如何在Docker主机中存储PostgreSQL状态

PostgreSQL对数据文件夹的处理与Docker的主机挂载文件夹不兼容。

它可能在安装了ext4文件系统的Linux下运行,但在OS X或Windows上运行

docker run -it --rm -v `pwd`/test:/var/lib/postgresql/data postgres 

initdb终止于随机磁盘写入错误,如:

 creating template1 database in /var/lib/postgresql/data/base/1 ... FATAL: could not write to file "pg_xlog/xlogtemp.25": Input/output error 

要么

 FATAL: could not close file "base/1/1249": Input/output error FATAL: could not close file "base/1/2603": Input/output error CONTEXT: writing block 0 of relation base/1/1247 

当使用命名卷时,一切正常,但是命名卷并不是保存数据的一种安全方式。 例如,在Docker for Mac中,它们都隐藏在一个巨大的qcow2虚拟磁盘映像中。

你build议在非Linux主机上保持PostgreSQL状态的策略是什么?

我应该每隔n分钟将备份保存到安装的文件夹中,并在启动时检查数据文件夹,并在需要时从备份中恢复? 或者,我应该只在命名卷和主机安装的卷之间rsync? 有没有解决这个项目/docker文件?