Приложение Rails не может подключиться к postgres, запущенному на docker - PullRequest
0 голосов
/ 05 августа 2020

Мой файл 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 я знаю, что база данных, пользователь и пароль были созданы правильно, так как я могу получить доступ к postgres консоль с использованием docker exec -it df01156d5fbd psql -U myuser -W и просмотр баз данных с использованием \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

1 Ответ

0 голосов
/ 05 августа 2020

Сервер postgres работает внутри вашего docker контейнера на порту 5432, но ваше приложение работает на хост-машине и ищет postgres сервер на хосте на порте 5432 и не находит его, следовательно, терпит неудачу.

Попробуйте сопоставить порты conatiner и хост-машины.

ports:
  - "5432:5432"
...