试图从RubyonRails连接到postgres(在docker容器中)



我在玩Docker,想在Docker容器中设置postgreSQL,然后从Ruby on Rails应用程序连接到它。这是docker compose文件——我在这里遵循这种方法。

version: "3"
services:
db:
image: "postgres:13"
container_name: "postgres_dev"
environment:
POSTGRES_PASSWORD: "pgdev2021"
ports:
- "54320:5432"
volumes:
- pgdata://Users/thomas/Documents/Production/PostgreSQL/dbstorage
volumes:
pgdata:

但是,当我试图跑";Rails数据库:准备";,我得到这个错误:

rails aborted!
ActiveRecord::ConnectionNotEstablished: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.54320"?
/Users/thomas/Documents/Websites/rails-frontend/bin/rails:5:in `<top (required)>'
/Users/thomas/Documents/Websites/rails-frontend/bin/spring:10:in `block in <top (required)>'
/Users/thomas/Documents/Websites/rails-frontend/bin/spring:7:in `<top (required)>'
Caused by:
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/pgsql_socket/.s.PGSQL.54320"?
/Users/thomas/Documents/Websites/rails-frontend/bin/rails:5:in `<top (required)>'
/Users/thomas/Documents/Websites/rails-frontend/bin/spring:10:in `block in <top (required)>'
/Users/thomas/Documents/Websites/rails-frontend/bin/spring:7:in `<top (required)>'
Tasks: TOP => db:prepare
(See full trace by running task with --trace)

当我检查时,容器正在运行

编辑:database.yml

default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
port: 54320
user: postgres
development:
<<: *default
database: db_development
test:
<<: *default
database: db_test
production:
<<: *default
database: db_production
username: postgres
password: <%= ENV['MY_DB_PASSWORD'] %>

如果我想启动Postgres,我总是提供一个用户、密码和初始数据库。

您是在尝试进行容器间联网还是从主机系统访问?如果是内部容器网络,请记住默认情况下服务的主机名等于服务名称。

示例组成文件:

version: "3.9"
services:
postgres:
image: "postgres:13"
container_name: "postgres_dev"
ports:
- 5432:5432
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: password
POSTGRES_DB: my-database

现在,您可以从docker-compose.yml中指定的任何其他service连接到postgres:5432。或者从您的主机连接http://localhost:5432。更多关于docker撰写网络。

通过访问容器并运行以下内容进行验证:

docker exec -it postgres_dev bash
psql -h localhost -p 5432 -U root -P password -d my-database

最新更新