docker-compose не запускает postgres

Я создаю конфигурацию docker-compose для приложения django, Dockerfile успешно строится, но когда я их составляю, django возвращает проблему - не может подключиться к postgres.

Я запускаю docker-compose run web bash, обнаружил, что redis и posgres не могут быть подключены.

Мой файл docker-compose.yml

web:
 build: .
  ports:
    - "8000:8000"
environment:
  - 'DATABASE_HOST=db'
  - 'DATABASE_NAME=mydb'
  - 'DATABASE_USER=root'
  - 'DATABASE_PASSWORD=root'
links:
  - db
db:
  image: postgres:9.1

при запуске sudo docker-compose up я получил следующую ошибку.

web_1 |   File "/usr/local/lib/python2.7/site packages/django/db/backends/postgresql/base.py", line 175, in  get_new_connection

web_1 |     connection = Database.connect(**conn_params)
web_1 |   File "/usr/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 164, in connect
web_1 |     conn = _connect(dsn, connection_factory=connection_factory, async=async)
web_1 | django.db.utils.OperationalError: could not connect to server: Connection refused
web_1 |     Is the server running on host "localhost" (::1) and accepting
web_1 |     TCP/IP connections on port 5432?
web_1 | could not connect to server: Connection refused
web_1 |     Is the server running on host "localhost" (127.0.0.1) and accepting
web_1 |     TCP/IP connections on port 5432?

person Ashish Kumar Verma    schedule 18.07.2016    source источник
comment
У вас есть что-нибудь в настройках Django, чтобы использовать эти переменные среды для определения базы данных?   -  person Daniel Roseman    schedule 18.07.2016
comment
мои настройки джанго: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'aiotadb', 'USER': 'root', 'PASSWORD': 'root', 'HOST': 'db', 'PORT': '5432', } }   -  person Ashish Kumar Verma    schedule 18.07.2016
comment
также попытался изменить 'HOST':'localhost' в файле настроек и изменить 'DATABASE_HOST=localhost' в docker-compose.yml. Все еще сталкиваясь с той же проблемой.   -  person Ashish Kumar Verma    schedule 18.07.2016
comment
Я не уверен, почему вы удосужились установить эти значения в docker-compose.yml, поскольку вы их нигде не используете; вы жестко запрограммировали настройки. Это сообщение об ошибке ясно показывает, что он пытается получить доступ к localhost, а не db, поэтому вы должны убедиться, что у вас действительно есть 'HOST': 'db'.   -  person Daniel Roseman    schedule 18.07.2016


Ответы (3)


Я также создал кластеризацию с помощью docker-compose, возможно, это поможет вам и решит вашу проблему (вот репозиторий< /а>). Вы можете увидеть docker-compose.yml. файл и django настройки файл (я отметил нужные вам строки).

Вы также можете клонировать этот репозиторий и получить контейнеры django, angular2, postgresql и nginx, все уже связанные друг с другом.

person Nirgn    schedule 18.07.2016
comment
Спасибо @Nir. Я тоже пробовал это, но все равно ошибка такая же, как Является ли сервер работающим на хосте localhost (::1) и принимающим. Я пробовал докер, используя sqlite3, и это сработало как шарм . - person Ashish Kumar Verma; 18.07.2016
comment
@АшишК. обратите внимание на мой файл docker-compose.yml, мою базу данных server (django) depends_on. Это означает, что контейнер server всегда будет ждать контейнер database и раскручиваться после него, а не раньше. Кроме того, загрузите свой файл settings.py, обратите внимание на 'HOST': 'database' и 'PORT': 5432 в моем (я думаю, это ваша проблема. Ваш хост должен быть именем контейнера базы данных). - person Nirgn; 18.07.2016
comment
Спасибо. Обнаружил проблему. Теперь работает успешно. - person Ashish Kumar Verma; 18.07.2016
comment
порт 5432 не умеет ничего слушать :) - person Ashish Kumar Verma; 19.07.2016

Вы связываете свой веб-контейнер с контейнером postgres, но не указываете имя базы данных, пароль и пользователя.

  web:
   build: .
   ports:
    - "8000:8000"
   links:
    - db
  db:
    restart: always
    image: postgres:9.1
    ports:
      - "5432:5432"
    volumes:
      - pgvolume:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=root
      - POSTGRES_DB= aiotadb
      - POSTGRES_USER=root
   data:
    restart: always
    image: postgres:9.1
    volumes:
      - /var/lib/postgresql
    command: tail -f /dev/null

Кроме того, если вы уже определили параметры своей базы данных в файле настроек, вам не нужно объявлять их как переменные env в веб-контейнере.

person levi    schedule 09.08.2016

Добавьте зависимость в свой «веб-сервис», как показано ниже:

depends_on:
  - db
person Ibrahim Saifee    schedule 21.10.2020