pg_restore到postgres在Docker容器中运行

我有一个数据库的备份,我将恢复到在docker容器内运行的postgres数据库。

我在OS X上使用docker-machine。
Postgres的图像是postgres:9.4

这是我到目前为止的脚本:

 pg_restore --verbose --clean --no-acl --no-owner \ -h tcp://`docker-machine ip default`:5432 \ -U postgres \ -d tonsser-api_development latest.dump 

但是这不起作用。 我得到的错误:

 pg_restore: connecting to database for restore pg_restore: [archiver (db)] connection to database "tonsser-api_development" failed: could not translate host name "tcp://192.168.99.100:5432" to address: nodename nor servname provided, or not known 

也许是因为你必须分别指定主机和端口?

 -h `docker-machine ip default` -p 5432 

看文档

你必须使用连接string,例如$DATABASE_URL

以下对我很好:

 docker-compose exec fooapp pg_restore --verbose --clean --no-acl --no-owner -d $DATABASE_URL foo.dump 

对于额外的点,你可以创build一个rake任务(假设你正在使用Rails应用程序),如下所示:

 namespace :db do desc 'Import a given file into the database' task :import, [:path] => :environment do |_t, args| dump_path = args.path system 'pg_restore --verbose --clean --no-acl --no-owner -d $DATABASE_URL '\ + dump_path end end 

把这个文件放在lib/tasks ,然后你可以调用如下的东西:

 docker-compose exec fooapp bundle exec rails db:import[foo.dump]