pg_restore для postgres, работающего в докере

У меня есть резервная копия базы данных, которую я хотел бы восстановить в базу данных postgres, работающую в док-контейнере.

Я использую Docker-машину на OS X.
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

3 ответа

Кажется, не существует правильного решения сделать это во время выполнения, однако скопируйте файл дампа в контейнер:

docker cp dumpfile DBcontainer:/dumpfile

и восстановить изнутри контейнера:

docker  exec -i -t DBcontainer /bin/bash
psql DBname < dumpfile

хорошо зарекомендовал себя...

Вы должны использовать строку подключения, например, $DATABASE_URL

Следующее хорошо работает для меня:

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

Для получения дополнительных очков вы можете создать задачу 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]

Может быть, потому что вы должны указать хост и порт отдельно?

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

См документы

Другие вопросы по тегам