将PostgreSQL数据库备份加载到Docker /初始Docker数据中
我正在将应用程序迁移到Docker中。 我遇到的问题之一是将初始数据加载到在Docker中运行的PostgreSQL的正确方法是什么? 我恢复数据库备份文件的典型方法不起作用。 我尝试了以下方法:
gunzip -c mydbbackup.sql.gz | psql -h <docker_host> -p <docker_port> -U <dbuser> -d <db> -W
这是行不通的,因为PostgreSQL提示input密码,而且我不能input密码,因为它是从STDOUT读取数据的。 我不能使用$ PGPASSWORD环境variables,因为我的主机中设置的任何环境variables没有设置在我的容器中。
我也尝试了上面类似的命令,除了使用-f标志,并指定一个sql备份文件的path。 这不起作用,因为我的文件不在我的容器上。 我可以使用我的Dockerfile中的ADD语句将文件复制到我的容器中,但这看起来不正确。
所以,我问社区。 将PostgreSQL数据库备份加载到Docker容器中的首选方法是什么?
我不能使用$ PGPASSWORD环境variables,因为我的主机中设置的任何环境variables没有设置在我的容器中。
我没有使用docker,但是你的容器看起来像所示命令中的远程主机,而psql
在本地运行。 所以PGPASSWORD
永远PGPASSWORD
在远程主机上设置,只能在本地设置。
如果问题归结为为此命令添encryption码:
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
选项。
这个选项的要点是要求input密码,即使上下文不需要密码。
它经常被误解为相当于mysql的-p
选项。 这是一个错误:在密码保护的连接上需要-p
, -W
从不需要,实际上是在脚本编写的时候。
-W, - 密码 强制psql在连接到之前提示input密码 数据库。 这个选项从来不是必需的,因为psql会自动的 如果服务器要求密码,则提示input密码 authentication。 但是,psql会浪费连接尝试 发现服务器需要密码。 在某些情况下,它是 值得键入-W来避免额外的连接尝试。