无法从dockers上的rails控制台连接到数据库

时间:2017-05-31 04:09:06

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

我使用DigitaloceanDockers上设置了我的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"?

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

请帮帮我!提前致谢

2 个答案:

答案 0 :(得分:0)

此处:docker run -i -t project_app:latest bash您未提供应用程序需要用作凭据的环境变量。

请使用已在此处设置env vars的docker-compose:

env_file: .env

所以这样跑:

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

答案 1 :(得分:0)

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

访问container终端的正确命令是

 docker exec -it project_app /bin/bash

访问terminal后,我能够在query内成功运行User.first,即rails console