【问题标题】:pg_dump issue in dockerdocker中的pg_dump问题
【发布时间】:2017-01-06 16:32:09
【问题描述】:

这是我的dockerfile,这是我的docker-compose file。当我运行docker-compose run web rake db:migrate 时,我得到了这个错误

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 并得到了这个错误

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 的版本号。

知道为什么会这样吗?

【问题讨论】:

  • pg_dump --version 为您提供 pg_dump 的版本 :-) 如果您连接到容器,您将以 root 身份运行,而普通的 pg_dump 命令在这种情况下尝试以用户“root”身份连接到数据库“root” ”。您需要添加 -U 和 -d 等参数 - 签入文档。另外检查 pg_hba.conf 文件 - 它包含用户连接的“允许”。
  • 有没有办法解决上述问题?

标签: postgresql ruby-on-rails-4 docker docker-compose dockerfile


【解决方案1】:

我知道这个问题很老,但我还是遇到了同样的问题:

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"?

但是,我没有设置 root 角色。所以对我来说修复是export PGUSER=postgres。 甚至可以通过compose 文件设置PGUSER。喜欢:

services:
  some_exact_service:
    ...
    environment:
      PGUSER: postgres

希望您理解,您可以将postgres 角色名称替换为您自己的;)。

【讨论】:

    【解决方案2】:

    使用run 命令不是最好的方法,因为您需要启动并运行 postgres 服务器。尝试使用exec,请记住,使用-f 作为pg_dump 中的参数将在正在运行的实例内创建一个文件,因此您可能希望使用&gt; 编写文件来重定向输出并在容器外创建转储。就我而言,我会这样做:

    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

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2020-12-23
      相关资源
      最近更新 更多