fe_sendauth: пароль не указан (PG :: ConnectionBad) Docker контейнер - PullRequest
0 голосов
/ 21 февраля 2020

Я следовал руководству, чтобы докеризировать существующее приложение rails. Приложение успешно работает в development env. Но когда я пытаюсь запустить как , заявляя env, я получаю сообщение об ошибке. Я сохранил тот же конфиг для изложения и разработки. Вот мои связанные файлы:

database.yml

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

development:
  <<: *default
  pool: 10
  timeout: 5000
  database: <%= ENV['DATABASE_NAME'] %>
  username: <%= ENV['DATABASE_USER_NAME'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>
  host: db
  port: 5432

staging:
  <<: *default
  pool: 10
  timeout: 5000
  database: <%= ENV['DATABASE_NAME'] %>
  username: <%= ENV['DATABASE_USER_NAME'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>
  host: db
  port: 5432

application.yml

development:
  DATABASE_USER_NAME: 'developer'
  DATABASE_PASSWORD: 'qmwneb10PG'
  DATABASE_NAME: 'concern_box'
staging:
  DATABASE_USER_NAME: 'developer'
  DATABASE_PASSWORD: 'qmwneb10PG'
  DATABASE_NAME: 'concern_box'

docker -compose.yml

version: '3'
services:
  app:
    build: .
    container_name: cb_app_container
  db:
    container_name: cb_db_container
    image: postgres:9.6
    hostname: postgres
    ports:
      - "5432:5432"

docker -compose.stag.yml

version: '3'
services:
  app:
    environment:
      RAILS_ENV: staging
    command: bundle exec rails s -p 80 -b '0.0.0.0'
    ports:
      - "80:80"
    depends_on:
      - db

  db:
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

docker -compose.dev.yml

version: '3'
services:
  app:
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    stdin_open: true
    tty: true
    volumes:
      - .:/concern-box
    ports:
      - "3001:3000"
    depends_on:
      - db

  db:
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

init. sql

CREATE USER developer WITH PASSWORD 'qmwneb10PG';
CREATE DATABASE concern_box;
GRANT ALL PRIVILEGES ON DATABASE concern_box TO developer;

Я использую следующие команды для вращения контейнеров docker-compose -f docker-compose.yml -f docker-compose.dev.yml up --force-recreate для разработки env и docker-compose -f docker-compose.yml -f docker-compose.stag.yml up --force-recreate для запуска в качестве постановочной среды.

1 Ответ

1 голос
/ 22 февраля 2020

В файле database.yml development и staging загружаются из ENV [], у вашего контейнера должны быть секреты, загруженные из среды Os

Не забудьте загрузить свой секрет в среду хоста, или используйте функцию env_file из docker -compose

docker -compose.stag.yml

version: '3'
services:
  app:
    environment:
      RAILS_ENV: staging
      DATABASE_USER_NAME: ${DATABASE_USER_NAME}  # <-- Add this
      DATABASE_PASSWORD: ${DATABASE_PASSWORD}    # <-- Add this
      DATABASE_NAME: ${DATABASE_NAME}            # <-- Add this
    command: bundle exec rails s -p 80 -b '0.0.0.0'
    ports:
      - "80:80"
    depends_on:
      - db

  db:
    expose:
      - 5432    # Just to make sure app will see the port
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

docker -compose.dev.yml

version: '3'
services:
  app:
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    environment:
      DATABASE_USER_NAME: ${DATABASE_USER_NAME}  # <-- Add this
      DATABASE_PASSWORD: ${DATABASE_PASSWORD}    # <-- Add this
      DATABASE_NAME: ${DATABASE_NAME}            # <-- Add this
    stdin_open: true
    tty: true
    volumes:
      - .:/concern-box
    ports:
      - "3001:3000"
    depends_on:
      - db

  db:
    expose:
      - 5432    # Just to make sure app will see the port
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

database.yml загружается из ENV [], а не из файла application.yml

database.yml
...
staging:
  <<: *default
  pool: 10
  timeout: 5000
  database: <%= ENV['DATABASE_NAME'] %>
  username: <%= ENV['DATABASE_USER_NAME'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>
  host: db
  port: 5432
...

application.yml
staging:
  DATABASE_USER_NAME: 'developer'
  DATABASE_PASSWORD: 'qmwneb10PG'
  DATABASE_NAME: 'concern_box'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...