【问题标题】:Loading PostgreSQL Database Backup Into Docker/Initial Docker Data将 PostgreSQL 数据库备份加载到 Docker/初始 Docker 数据中
【发布时间】:2014-09-19 16:22:02
【问题描述】:

我正在将一个应用程序迁移到 Docker。我遇到的一个问题是将初始数据加载到在 Docker 中运行的 PostgreSQL 中的正确方法是什么?我恢复数据库备份文件的典型方法不起作用。我尝试了以下方法:

gunzip -c mydbbackup.sql.gz | psql -h <docker_host> -p <docker_port> -U <dbuser> -d <db> -W

这不起作用,因为 PostgreSQL 提示输入密码,而我无法输入密码,因为它正在从 STDOUT 读取数据。我无法使用 $PGPASSWORD 环境变量,因为我在主机中设置的任何环境变量都没有在我的容器中设置。

我也尝试了上面类似的命令,除了使用 -f 标志,并指定 sql 备份文件的路径。这不起作用,因为我的文件不在我的容器上。我可以使用 Dockerfile 中的 ADD 语句将文件复制到我的容器中,但这似乎不对。

所以,我问社区。将 PostgreSQL 数据库备份加载到 Docker 容器中的首选方法是什么?

【问题讨论】:

标签: postgresql backup docker


【解决方案1】:

我不能使用 $PGPASSWORD 环境变量,因为任何 我在主机中设置的环境变量未在我的容器中设置。

我不使用 docker,但您的容器在显示的命令中看起来像一个远程主机,psql 在本地运行。所以PGPASSWORD 不必在远程主机上设置,只需在本地设置。

如果问题归结为向此命令添加密码:

gunzip -c mydbbackup.sql.gz |
  psql -h <docker_host> -p <docker_port> -U <dbuser> -d <db> -W

您可以使用多种方法提交它(在所有情况下,不要使用 psql 的-W 选项)

  • 在调用中硬编码:

     gunzip -c mydbbackup.sql.gz |
      PGPASSWORD=something psql -h <docker_host> -p <docker_port> -U <dbuser> -d <db>
    
  • 在键盘上输入

     echo -n "Enter password:"
     read -s PGPASSWORD
     export PGPASSWORD
     gunzip -c mydbbackup.sql.gz |
       psql -h <docker_host> -p <docker_port> -U <dbuser> -d <db>
    

注意关于 psql 的 -W--password 选项。

这个选项的要点是首先要求输入密码,即使上下文不需要它。

它经常被误解为等同于 mysql 的-poption。这是一个错误:虽然-p 在受密码保护的连接上是必需的,但-W 从来都不是必需的,实际上在编写脚本时会妨碍它。

-W,--密码 强制 psql 在连接到之前提示输入密码 数据库。 这个选项从来都不是必需的,因为 psql 会自动 如果服务器需要密码,则提示输入密码 验证。但是,psql 会浪费一次连接尝试 发现服务器需要密码。在某些情况下是 值得输入 -W 以避免额外的连接尝试。

【讨论】:

    猜你喜欢
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多