无法在Docker上从Rails控制台连接到数据库

我使用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 

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

我的application在生产上工作正常。 我能够创build和删除生产中的weblogging。

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

 docker run -i -t project_app:latest bash 

访问控制台:

 RAILS_ENV=production rails c 

每当我尝试访问任何model数据或尝试执行任何查询( ie Model.first等)时,内部的Rails Console我无法访问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"? 

我已经尝试了很多可能的解决scheme来解决这个问题,但无法解决这个问题

请帮帮我! 提前致谢

在这里: docker run -i -t project_app:latest bash你没有提供你的应用程序需要用作凭证的env vars。

因此,请使用您已经在此设置env vars的docker-compose:

 env_file: .env 

所以这样运行:

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

最后我尝试了很多,我发现了一个解决scheme。 我正在使用docker run -i -t project_app:latest bash命令来访问container并运行rails console命令,这是错误的。

访问containerdocker的正确命令是

  docker exec -it project_app /bin/bash 

访问terminal我能够成功地运行query即在rails consoleUser.first