Django не смог создать соединение с базой данных 'postgres' и вместо этого будет использовать базу данных по умолчанию - PullRequest
0 голосов
/ 15 марта 2019

Это сообщество является моим последним средством решения этой проблемы, так как я борюсь с этим уже несколько часов :(.

Я работаю над проектом, в котором я пытаюсь выполнить тесты с помощью docker-compose, сэта команда docker-compose run runserver python3.6 manage.py test но я не понимаю, откуда она и как ее решить. Вот мои ошибки

/usr/local/lib/python3.6/dist-packages/django/db/backends/postgresql/base.py:267: RuntimeWarning: Normally Django will use a connection to the 'postgres' database to avoid running initialization queries against the production database when it's not needed (for example, when running tests). Django was unable to create a connection to the 'postgres' database and will use the default database instead.

и

psycopg2.OperationalError: could not connect to server: Connection timed out Is the server running on host "postgres" (172.18.0.3) and accepting TCP/IP connections on port 5432?

Итак, docker-compose работает очень хорошо.

Вот docker-compose.yml:

version: '3'

services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - path_volume
    ports:
      - "5432:5432"

  elasticsearch:
    image: path_elastic_search
    ports:
      - "9200:9200"
    environment:
      - xpack.security.enabled=false
    ulimits:
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - path_volume

  rabbitmq:
    image: rabbitmq:3
    ports:
      - "5672:5672"
      - "15672:15672"

  redis:
    image: redis

  celery:
    build:
      context: .
    env_file: .env
    volumes:
      - .:/opt/project
    depends_on:
      - postgres
      - elasticsearch
      - rabbitmq
      - redis
    command: celery -A project worker --beat -l debug

  runserver:
    build:
      context: .
    env_file: .env
    volumes:
      - .:/opt/project
      - /opt/project/src
    depends_on:
      - postgres
      - elasticsearch
      - rabbitmq
      - redis
      - celery
    command: python3.6 manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
мои зависимости:
  • Django == 1.11.5
  • postgres == 9

ответ на командустрока docker-compose ps это:

            Name                          Command                State                                          Ports                                     
----------------------------------------------------------------------------------------------------------------------------------------------------------
datablitzapi_celery_1          celery -A datablitz worker ...   Up                                                                                        
datablitzapi_elasticsearch_1   /bin/bash bin/es-docker          Up         0.0.0.0:9200->9200/tcp, 9300/tcp                                               
datablitzapi_postgres_1        docker-entrypoint.sh postgres    Up         0.0.0.0:5432->5432/tcp                                                         
datablitzapi_rabbitmq_1        docker-entrypoint.sh rabbi ...   Up         0.0.0.0:15672->15672/tcp, 25672/tcp, 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp
datablitzapi_redis_1           docker-entrypoint.sh redis ...   Up         6379/tcp                                                                       
datablitzapi_runserver_1       python3.6 manage.py runser ...   Exit 255   0.0.0.0:8000->8000/tcp    

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

наконец, я пришел в офис сегодня, я включил свой компьютер и чудесным образом все работает, и я не знаю почему :(. Спасибо за все ваши ответы.

0 голосов
/ 16 марта 2019

Эта проблема возникает из-за того, что Django ожидает, что база данных будет запущена и работает (Читать для подключений)

psycopg2.OperationalError: could not connect to server: Connection timed out Is the server running on host "postgres" (172.18.0.3) and accepting TCP/IP connections on port 5432?

Вам нужно добавить механизм задержки, чтобы Django ожидал, пока ваш контейнер PostgreSQL фактически не будет работатьготов принимать соединения.Для получения более подробной информации вы можете взглянуть на мой ответ здесь , он был о MySQL, и тот же сценарий применим к PostgreSQL.

Относительно этой проблемы и согласно следующий ответ , это может быть также по той же причине

/usr/local/lib/python3.6/dist-packages/django/db/backends/postgresql/base.py:267: RuntimeWarning: Normally Django will use a connection to the 'postgres' database to avoid running initialization queries against the production database when it's not needed (for example, when running tests). Django was unable to create a connection to the 'postgres' database and will use the default database instead.

Итак, начните с реализации wait-for-it, которая была объяснена в первой ссылке, а затем повторите попытку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...