1

Вот мой dockerfile и вот мой docker-compose file. Когда я побежал docker-compose run web rake db:migrate Я получил этот ERRpg_dump issue in docker

rake aborted! 
failed to execute: 
pg_dump -s -x -O -f /usr/src/app/db/structure.sql --schema=public --schema=partitioning docker_rails_dev 

Please check the output above for any errors and make sure that `pg_dump` is installed in your PATH and has proper permissions. 

/usr/local/bundle/gems/activerecord-4.2.7.1/lib/active_record/tasks/postgresql_database_tasks.rb:90:in `run_cmd' 
/usr/local/bundle/gems/activerecord-4.2.7.1/lib/active_record/tasks/postgresql_database_tasks.rb:55:in `structure_dump' 
/usr/local/bundle/gems/activerecord-4.2.7.1/lib/active_record/tasks/database_tasks.rb:183:in `structure_dump' 
/usr/local/bundle/gems/activerecord-4.2.7.1/lib/active_record/railties/databases.rake:279:in `block (3 levels) in <top (required)>' 
/usr/local/bundle/gems/activerecord-4.2.7.1/lib/active_record/railties/databases.rake:53:in `block (2 levels) in <top (required)>' 
/usr/local/bundle/gems/activerecord-4.2.7.1/lib/active_record/railties/databases.rake:45:in `block (2 levels) in <top (required)>' 
Tasks: TOP => db:structure:dump 
(See full trace by running task with --trace) 

так что я вошел в Postgres контейнер и побежал pg_dump и получил этот ERR

pg_dump: [archiver (db)] connection to database "root" failed: could not connect to server: No such file or directory 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 

но работаю pg_dump --version дает мне номер версии Postgres.

любая идея, почему это происходит?

+2

'pg_dump --version' дает вам версию pg_dump :-) Если вы подключаетесь к contai Если вы запускаете как root, а простая команда 'pg_dump' в этом случае пытается подключиться как пользовательский« root »к базе данных« root ». Вам нужно добавить такие параметры, как -U и -d - проверить документацию. Плюс проверьте файл pg_hba.conf - он содержит «скидки» для подключения пользователей. – JosMac

+0

есть ли способ исправить вышеупомянутую проблему? – Raaz

ответ

1

Использование команды run - это не лучший способ, так как вам нужен сервер postgres. Попробуйте с exec, имейте в виду, что использование -f в качестве аргумента в pg_dump создаст файл внутри исполняемого экземпляра, чтобы вы могли записать файл с помощью > для перенаправления вывода и создания дампа вне контейнера. В моем случае я сделать что-то вроде:

docker-compose -f $PROJECT_PATH/docker-compose-$ENV.yml exec postgres pg_dump -U $DBUSER -Z 9 $DOCKERSERVICE > backups/db/postgres-`date +"%m%d%y%H%M%S".sql.gz` 

Где $DOCKERSERVICE обычно postgres

Для вас случае это может быть что-то вроде:

docker-compose exec web rake db:migrate

И в better reference для docker-compose exec