【问题标题】:Rails application cannot connect to postgres running on dockerRails 应用程序无法连接到在 docker 上运行的 postgres
【发布时间】:2020-08-05 18:54:39
【问题描述】:

我的 docker-compose.yml 文件有以下内容:

version: '3'
services:
  postgresql:
    image: postgres:11.3
    environment:
      - POSTGRES_USER=myuser
      - POSTGRES_PASSWORD=mypassword
    ports:
      - 5432
    volumes:
    - postgresql_data:/var/lib/postgresql/data
  
volumes:
  postgresql_data:

运行命令docker-compose up 后,我知道数据库、用户和密码已正确创建,因为我可以使用docker exec -it df01156d5fbd psql -U myuser -W 访问postgres 控制台并使用\l 查看数据库。输出是

myuser=# \l
                                            List of databases
      Name      |     Owner      | Encoding |  Collate   |   Ctype    |         Access privileges         
----------------+----------------+----------+------------+------------+-----------------------------------
 myuser         | myuser         | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres       | myuser         | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0      | myuser         | UTF8     | en_US.utf8 | en_US.utf8 | =c/myuser                        +
                |                |          |            |            | myuser=CTc/myuser
 template1      | myuser         | UTF8     | en_US.utf8 | en_US.utf8 | =c/myuser                        +
                |                |          |            |            | myuser=CTc/myuser
(4 rows)

但是在运行bundle exec rails s 并输入localhost:3000 时出现以下错误 FATAL: password authentication failed for user "myuser"

我的database.yml文件如下

development: &default
  adapter: postgresql
  database: <%= ENV["DB_NAME] || 'myuser' %>
  encoding: utf8
  host: <%= ENV["DB_HOST"] || "127.0.0.1" %>
  port: <%= ENV["DB_PORT"] || 5432 %>
  username: <%= ENV["DB_USER"] || 'myuser' %>
  password: <%= ENV["DB_PASSWORD"] || 'mypassword' %>
  min_messages: warning
  pool: <%= Integer(ENV.fetch("DB_POOL", 5)) %>
  reaping_frequency: <%= Integer(ENV.fetch("DB_REAPING_FREQUENCY", 10)) %>
  timeout: 5000

【问题讨论】:

  • 您使用的是 ENV 变量吗?因为您在数据库 yml 文件中有“myuser”作为密码。
  • 哦,那是写帖子时的错误。实际用户和密码不同。

标签: ruby-on-rails postgresql docker docker-compose


【解决方案1】:

postgres 服务器在 docker 容器中的 5432 端口运行,但您的应用程序在主机上运行,​​并在主机上的 5432 端口搜索 postgres 服务器,但没有找到,因此失败。

尝试映射容器和主机的端口。

ports:
  - "5432:5432"

【讨论】:

  • 谢谢,我想就是这样。我有一个错误,因为端口 5432 已经在使用中,但我想我可以解决它。
  • 如果真的对您有帮助,请您接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2020-11-21
相关资源
最近更新 更多