Django не может найти базу данных при использовании docker -compose - PullRequest
0 голосов
/ 31 января 2020

Dockerfile

FROM python:3.8

ENV PYTHONUNBUFFERED 1
ENV WORKDIR /usr/src/app

WORKDIR ${WORKDIR}

RUN pip install --upgrade pip && pip install pipenv


COPY ./Pipfile* ${WORKDIR}/

RUN pipenv lock --requirements > requirements.txt

RUN pip install -r requirements.txt

ADD . ${WORKDIR}/

docker -compose.yml

version: '3'

services:
  database:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: development
      POSTGRES_USER: development
      POSTGRES_DB: dev_db
    ports:
      - 5432:5432
  backend:
    build: .
    command: python /usr/src/app/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/usr/src/app
    ports:
      - 8000:8000
    depends_on:
      - database

Django конфигурации базы данных

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'dev_db',
        'USER': 'development',
        'PASSWORD': 'development',
        'HOST': 'database',
        'PORT': 5432,
    }
}

Однако, когда я запускаю docker compose, он выдает следующее сообщение:

> Is the server running on host "database" (172.29.0.2) and accepting
    TCP/IP connections on port 5432?

Кто-нибудь может дать несколько советов, почему я получаю эту ошибку? Насколько я знаю, обе службы находятся в одной сети

Ответы [ 2 ]

1 голос
/ 31 января 2020

Вероятно, это связано с тем, что когда экземпляр Django готов, Postgres все еще запускается.

Распространенным решением является использование сценария, например wait-for для задержки выполнение команды до тех пор, пока служба не ответит на заданный c хост / порт.

Посмотрите документацию Docker о управлении порядком запуска нескольких контейнеров.

0 голосов
/ 31 января 2020

Я думаю, вам не хватает имени хоста в файле yml. Смотри ниже

services:
  database:
    image: postgres:latest
    hostname: database
    environment:
      POSTGRES_PASSWORD: development
      POSTGRES_USER: development
      POSTGRES_DB: dev_db
    ports:
      - 5432:5432
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...