【问题标题】:Unable to connect to database from rails console on dockers无法从 docker 上的 Rails 控制台连接到数据库
【发布时间】:2017-10-31 17:01:55
【问题描述】:

我使用DockersDigitalocean 上设置了我的rails 项目。这是我的docker-compose.prod.yml 文件。

version: "2"

volumes:
 db-data:
   external: false

services:
 db:
  image: postgres
  env_file: .env.production
 volumes:
   - db-data:/var/lib/postgresql/data

app:
 build: .
 env_file: .env
 environment:
   RAILS_ENV: production
 ports:
   - "3000:3000"
 depends_on:
   - db

这是我的database.yml 文件

default: &default
 adapter: postgresql
 encoding: unicode
 host: db
 username: <%= ENV["POSTGRES_USER"] %>
 password: <%= ENV["POSTGRES_PASSWORD"] %>
 # For details on connection pooling, see rails configuration guide
 # http://guides.rubyonrails.org/configuring.html#database-pooling
 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
 <<: *default
 database:  project_development

test:
 <<: *default
 database: project_test

production:
 <<: *default
 host: <%= ENV["POSTGRES_HOST"] %>
 database: project_production

我创建了两个docker 图像。一种用于app,另一种用于postgres/db

我的application 在生产中运行良好。我可以在我的 web 生产页面创建和删除记录。

但是,当我尝试通过以下命令从 docker bash 访问 production database 的 rails 控制台时:

docker run -i -t project_app:latest bash 

访问控制台:

RAILS_ENV=production rails c

Rails Console 内部,每当我尝试访问任何model 数据或尝试执行任何查询(i.e Model.first 等)时,我都无法访问postgres 数据库。它向我显示以下错误:

PG::ConnectionBad: 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"?

我尝试了许多可能的解决方案来解决此问题,但无法解决此问题。

请帮帮我!提前致谢

【问题讨论】:

    标签: postgresql ruby-on-rails-3 docker digital-ocean rails-console


    【解决方案1】:

    在尝试了很多之后,我终于找到了解决方案。我使用docker run -i -t project_app:latest bash 命令访问container 并运行rails console 命令,这是错误的。

    访问container的终端的正确命令是

     docker exec -it project_app /bin/bash
    

    访问terminal 后,我能够成功运行query,即User.firstrails console 内。

    【讨论】:

      【解决方案2】:

      这里:docker run -i -t project_app:latest bash 您没有提供应用程序需要用作凭据的环境变量。

      所以请使用您已经在此处设置环境变量的 docker-compose:

      env_file: .env
      

      所以运行如下:

      docker run --env-file .env -i -t project_app:latest bash
      

      【讨论】:

      • 当我使用此命令时,出现以下错误:PG::ConnectionBad: could not translate host name "db" to address: Name or service not known
      • 看来你需要启动坑docker-compose的东西。很简单:docker-compose up -d 然后docker-compose exec app bash。这是你需要的吗?
      • Docker compose 已经启动。容器已经开始工作了。但是在环境生产的rails控制台中。我无法访问数据。例如,如果我运行像 User.first 这样的任何命令,它会显示错误 PG::ConnectionBad: could not translate host name "db" to address: Name or service not known
      • 如果容器已经在运行,直接进入它们,如下:docker-compose exec app bashdocker exec -it container-id bash
      • 我可以进入containersrails c但是我无法查询数据库。 'User.first' 等显示我上面提到的错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 2014-05-26
      相关资源
      最近更新 更多