无法在Docker上从Rails控制台连接到数据库
我使用Dockers
在Digitalocean
安装了我的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和删除生产中的web
logging。
但是,当我尝试通过以下命令从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
命令,这是错误的。
访问container
docker的正确命令是
docker exec -it project_app /bin/bash
访问terminal
我能够成功地运行query
即在rails console
内User.first
。