【问题标题】:Rails not able to access Postgresql deployed by DockerRails 无法访问 Docker 部署的 Postgresql
【发布时间】: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


【解决方案1】:

在Postgresql配置文件中,尝试输入, listen_addresses='*';

【讨论】:

    猜你喜欢
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多