在启动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绑定到本地主机上的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中正确地回显它们。
任何帮助都将不胜感激!谢谢

最佳答案

经过多次头部撞击,我解决了这个问题。不知道具体是怎么回事,但似乎是以下几点起作用:
安装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

现在似乎在按计划工作。

关于ruby-on-rails - 产品中的Rails 5:PG::ConnectionBad:严重:使用Docker的用户“postgres”的密码身份验证失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45906578/

10-16 11:14
查看更多