Loading PostgreSQL Database Backup Into Docker/Initial Docker Data
我正在将应用程序迁移到Docker中。我遇到的一个问题是将初始数据加载到Docker中运行的PostgreSQL的正确方法是什么?我恢复数据库备份文件的典型方法无效。我尝试了以下方法:
这不起作用,因为PostgreSQL提示输入密码,我无法输入密码,因为它正在从STDOUT读取数据。我不能使用$ PGPASSWORD环境变量,因为我在主机中设置的任何环境变量都没有在我的容器中设置。
除了使用-f标志外,我还尝试了上面的类似命令,并指定了sql备份文件的路径。这不起作用,因为我的文件不在我的容器上。我可以使用我的Dockerfile中的ADD语句将文件复制到我的容器中,但这似乎不正确。
所以,我问社区。将PostgreSQL数据库备份加载到Docker容器中的首选方法是什么?
I cannot use the $PGPASSWORD environment variable, because the any
environment variable I set in my host is not set in my container.
我不使用docker,但是你的容器在显示的命令中看起来像一个远程主机,
如果问题归结为向此命令添加密码:
1 2 | gunzip -c mydbbackup.sql.gz | psql -h <docker_host> -p <docker_port> -U <dbuser> -d <db> -W |
您可以使用多种方法提交它(在所有情况下,不要使用psql的
-
在调用中硬编码:
1
2gunzip -c mydbbackup.sql.gz |
PGPASSWORD=something psql -h <docker_host> -p <docker_port> -U <dbuser> -d <db> -
键入键盘
1
2
3
4
5echo -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的
这个选项的要点是首先要求输入密码,即使上下文使其不必要。
它经常被误解为相当于mysql的
1 2 3 4 5 6 7 8 9 | -W, --password Force psql TO prompt FOR a password BEFORE connecting TO a DATABASE. This OPTION IS never essential, since psql will automatically prompt FOR a password IF the server demands password authentication. However, psql will waste a connection attempt finding OUT that the server wants a password. IN SOME cases it IS worth typing -W TO avoid the extra connection attempt. |