Не удается подключить postgresql в докере (при получении запроса на сброс) - PullRequest
0 голосов
/ 18 ноября 2018

Я использую django / postgresql в контейнере Docker.При запуске docker-compose.yml служба postgresql запустится и на мгновение прослушивает, а затем отключается с помощью LOG:

«прослушивание на сокете Unix» / var / run / postgresql /.s.PGSQL.5432 «затем» система базы данных была закрыта ».

Я где-то читал, что она получает запрос на быстрое завершение работы postmaster, но я не знаю, как решить эту проблему.Я безуспешно пытался изменить порты и другие переменные PostgreSQL env.

Вот мой .ylm для docker-compose

version: '3'

volumes:
  postgres_data_local: {}
  postgres_backup_local: {}

services:
   django:
     build:
       context: .
       dockerfile: ./compose/local/django/Dockerfile
     depends_on:
       - postgres
       - redis
    volumes:
      - .:/app
    env_file: .env
    ports:
      - "8000:8000"
    command: /start.sh

postgres:
  image: postgres:10.1-alpine 
  build:
    context: .
    dockerfile: ./compose/production/postgres/Dockerfile
  volumes:
    - postgres_data_local:/var/lib/postgresql/data
    - postgres_backup_local:/backups
  env_file: .env

redis:
  image: redis:3.0
  ports:
    - '6379:6379'

Мой файл .env как-то похож на

# PostgreSQL conf
POSTGRES_PASSWORD=p3wrd
POSTGRES_USER=postgres
POSTGRES_DB=postgres
POSTGRES_HOST=127.0.0.1 #have tried localhost, 0.0.0.0 etc
POSTGRES_PORT=5432

DATABASE_URL= postgresql://postgres:p3wrd@127.0.0.1:5432/postgres

# General settings
READ_DOT_ENV_FILE=True
SETTINGS_MODULE=config.settings.test
SECRET_KEY=Sup3rS3cr3tP@22word
DEBUG=True
ALLOWED_HOSTS=*

# URL for Redis
REDIS_URL=redis://127.0.0.1:6379

1 Ответ

0 голосов
/ 18 ноября 2018

Почему вы устанавливаете POSTGRES_HOST на 127.0.0.1 или его варианты?Это означает «localhost», что в контейнере означает «локальный контейнер».Postgres не работает внутри контейнера django, поэтому он не будет работать.

Поскольку вы используете docker-compose, все ваши контейнеры работают в определенной пользователем сети.Это означает, что Docker поддерживает для вас DNS-сервер, который сопоставляет имена служб с ip-адресами контейнеров.Другими словами, вы можете просто установить:

POSTGRES_HOST=postgres
DATABASE_URL= postgresql://postgres:p3wrd@postgres:5432/postgres
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...