【问题标题】:Rails 5 in prod: PG::ConnectionBad: FATAL: password authentication failed for user "postgres" with Docker产品中的 Rails 5:PG::ConnectionBad:致命:使用 Docker 对用户“postgres”进行密码身份验证失败
【发布时间】:2017-08-27 15:29:58
【问题描述】:

启动我的 Rails 应用程序时,我在 Linode 服务器 (Ubuntu 17.04) 上看到以下错误:

PG::ConnectionBad: FATAL:  password authentication failed for user "postgres"

奇怪的是,这只发生在我的远程服务器上。在本地(在我的 Mac 上),它工作正常。我有以下 docker-compose.yml 文件:

version: "2"
services:
  postgres:
    image: postgres:9.6
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: "${DATABASE_NAME}"
      POSTGRES_PASSWORD: "${DATABASE_PASSWORD}"
    volumes:
      - postgres-data:/var/lib/postgresql/data
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
volumes:
  postgres-data:
    driver: local

应该将 Postgres 绑定到 localhost 上的端口 5432 并将密码设置为 DATABASE_PASSWORD 环境变量。如果我在服务器上运行ps aux | grep 5432,我可以看到 Docker 进程运行正常:

root     29550  0.0  0.2  34472  2888 ?        Sl   01:34   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5432 -container-ip 172.18.0.3 -container-port 5432

所以我无法弄清楚为什么我会收到密码验证失败的错误消息。

我的 config/database.yml 文件:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: localhost
  username: postgres

...

production:
  <<: *default
  database: <%= ENV['DATABASE_NAME'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>

变量是在我的环境中设置的,我可以从 shell 中正确地回显它们。

任何帮助将不胜感激!谢谢

【问题讨论】:

  • 第一次运行 docker-compose 时 /var/lib/postgresql/data 是否为空?
  • /var/lib/postgresql/data 在我的开发盒或产品盒中都不存在。它不是 Docker 容器中的目录吗?我不知道如何访问它来检查
  • 是的,对不起,我的错

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


【解决方案1】:

经过一番猛烈抨击后,我解决了这个问题。不知道具体是如何工作的,但以下似乎是有效的:

安装 ntp 只是为了确保时间设置正常

$ sudo timedatectl set-ntp no
$ sudo apt-get install ntp
$ sudo ntpq -p

指定一个 Redis 镜像版本

redis:
  image: redis:4.0
    ports:
      - "6379:6379"

然后尝试销毁所有 Docker 镜像

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
docker volume rm $(docker volume ls -qf dangling=true)

最后尝试重启Docker

docker-compose up -d

现在似乎正在按预期工作。

【讨论】:

  • 我遇到了同样的问题,在删除容器、图像和卷后我能够让它工作。我不需要更改图像版本或添加 unix 包。我认为删除旧卷是什么让它发挥作用。 +1
猜你喜欢
  • 2018-02-04
  • 2013-02-24
  • 2012-04-16
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
相关资源
最近更新 更多