将Postgresql数据库还原到Docker容器中,以便在Postgres启动时使用数据库

我有一个Postgresql数据转储文件。 我该如何将备份恢复到只有数据的容器中,以便在docker运行postgresql容器时进行还原?

由于Stackoverflow惩罚了简洁的答案,我重复了那里写的东西 :

  1. 创build一个只有数据的容器
  2. 运行一个临时Postgres容器来恢复备份。 附加仅数据容器和包含本地备份的目录。
  3. 附加到还原容器。 在容器内,
  4. 切换到postgresql用户
  5. 为数据库创build超级用户和匹配密码以进行恢复。
  6. 用\ q退出psql会话。 仍然在容器内,
  7. 在命令提示符下恢复备份
  8. 创build最终的Docker Postgres容器。 注意指定从上一步中恢复的数据库的正确名称。
  9. 将用于还原备份的容器删除到仅数据卷中

最简单的方法是在分开的文件夹中的主机上创build一个空的postgresql数据库,然后启动PostgreSQL守护进程,然后导入数据,然后简单地将其挂载到容器中。 使用下面的脚本可以在/tmp/postgres-mem文件夹中创build数据库,然后将数据导入到该文件夹​​中。

 #!/bin/bash export PGDIR=/tmp/postgres-mem pg_ctl -D "$PGDIR" stop rm -vfr "$PGDIR" mkdir "$PGDIR" pg_ctl init -D "$PGDIR" pg_ctl -D "$PGDIR" start -o "-h localhost -c fsync=off -c synchronous_commit=off -c full_page_writes=off -c log_destination='stderr' -c logging_collector=on -c log_directory='pg_log' -c log_filename='postgresql-%Y-%m-%d_%H%M%S.log' -c log_statement='all' -k /tmp/postgres-mem" sleep 3 psql -h localhost -c 'create user cooluser with superuser' template1 psql -h localhost -c 'create database "whatever"' template1 

接着

 psql -U cooluser whatever < your_dump_file.sql 

那么你将/ tmp / postgres-mem的内容复制到你的数据容器中

不过你可能要考虑这个方法 。