【发布时间】:2021-09-28 03:30:56
【问题描述】:
我有一个 docker 容器来启动我的 Postgres DB、Elasticsearch 和 Redis;但是,我的 rails 服务器无法连接到 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 "/tmp/.s.PGSQL.5432"?
):
当 Docker 启动数据库时,它会在 localhost:5432 上启动。通过终端,我可以通过运行psql -h localhost -U myUser 连接到数据库,但运行psql 会导致同样的错误...
我的 rails database.yml 文件配置为使用 myUser 连接到位于 localhost:5432 的数据库,但我不知道为什么它会给我这个错误。似乎 Rails 正在尝试连接到我的 Postgres.app 服务器,而不是 Docker 正在运行的服务器。
这是我的 database.yml 文件
default: &default
adapter: postgis // I have tried "postgresql" as well
encoding: unicode
reconnect: true
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
url: <%= ENV['DATABASE_URL'] %>
development:
<<: *default
database: my_db
username: <my username>
password: <my password>
这是我的 .env
DATABASE_URL=postgres://***:***@novus-postgis-localdev:5432
我的 docker 容器显示以下内容
ENVIRONMENT:
DATABASE_URL: postgres://<my username>:<my password>@novus-postgis-localdev:5432
PATH:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
...
PORTS:
5432/tcp: 0.0.0.0:5432
5432/tcp: :::5432
因此,我的 Rails 环境应该连接到我的 docker DB 服务器,但它似乎正在尝试连接到我的 Postgres.app 服务器(它没有运行)。
我在这里遗漏了什么/我的配置有什么问题让 Rails 查看错误的服务器?
FWIW,我在 macOS 上,我通过 Postgres.app 安装了 Postgres。
- 当 Postgres.app 运行服务器时,
psql命令会连接到它。 - 当 Docker 容器运行时,我无法启动 Postgres。应用服务器,因为端口 5432 已被使用(如预期的那样)
更新
我确实发现我的 Docker DB 容器正在侦听 Unix socket "/var/run/postgresql/.s.PGSQL.5432",而我的 Rails 指向套接字 /tmp/.s.PGSQL.5432。我无法弄清楚如何将其中任何一个更改为相同(rails 查看 /var/run/postgresql/... 或 docker 在 /tmp/... 启动套接字
【问题讨论】:
-
应用程序在哪里运行(在容器中?)?数据库(在一个单独的容器中?)?您如何启动这些容器(使用 Docker Compose?)?
-
Rails 应用程序没有在容器中运行,就在我的本地机器上。该数据库在我的本地机器上的容器中运行,该容器将数据库安装在我的本地主机上。容器使用 docker 脚本启动,该脚本使用
docker-compose启动服务
标签: ruby-on-rails postgresql docker