Связывание моего док-контейнера Django с контейнером postgres - PullRequest
0 голосов
/ 23 октября 2019

Я создаю образ приложения django docker. в моем приложении django в settings.py запись DATABASE:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'cath_local',
    'USER': 'postgres',
    'PASSWORD': 'mypass',
    'HOST': 'postgres',
    'PORT': '5432',
    'OPTIONS': {
        'client_encoding': 'UTF8',
    },
}
}

ну, на этом этапе я создаю свой образ докера с помощью команды docker build;все сделано. Перед запуском моего образа докера приложения django я запускаю:

docker run -it postgres

образ загружается и контейнер запускается правильно

enter image description here

но когда яЗапустите мое приложение django

docker run -it cath2019/cathedral_studio:latest

, но при запуске команды runserver python manage.py в моем Dockerfile я получаю эту ошибку:

conn = _connect (dsn, connection_factory = connection_factory, ** kwasync) django.db.utils.OperationalError: не удалось перевести имя хоста "postgres" в адрес: имя не разрешается

здесь мое приложение Dockerfile:

FROM python:3.6-alpine
RUN apk add --no-cache make linux-headers libffi-dev jpeg-dev zlib-dev
RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev
#RUN apk update && apk add build-essential libssl-dev libffi-dev
RUN mkdir /Code
WORKDIR /Code
COPY ./requirements.txt .

RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENV PYTHONUNBUFFERED 1

COPY . /Code/

ENTRYPOINT python /Code/core/manage.py runserver 0.0.0.0:8000

HowМогу ли я подключиться в моей базе данных настроек Django к работающему контейнеру postgres?

Заранее большое спасибо

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Вы можете использовать два метода для решения этой проблемы:

1. Пользовательские сети

Мостовая сеть по умолчанию присутствует на всех хостах Docker. Если вы не укажете другую сеть, новые контейнеры будут автоматически подключены к мостовой сети по умолчанию.

Ссылка

Вы можете получить IP-адрес контейнеров, используяdocker network inspect bridge. Затем вы можете использовать атрибут IP-адрес из контейнеров.

Это не рекомендуется, поскольку изменения в контейнере могут изменить IP-адрес.

Docker не поддерживает автоматическое обнаружение службы по умолчаниюмостовая сеть. Если вы хотите, чтобы контейнеры могли разрешать IP-адреса по имени контейнера, вам следует вместо этого использовать пользовательские сети. Вы можете связать два контейнера вместе, используя устаревшую опцию запуска dolink --link, но в большинстве случаев это не рекомендуется.

Чтобы создать сеть, выполните docker network create --driver bridge django_network.

Затемприсоедините оба контейнера к одной сети, используя docker run -it postgres --network=django_network и docker run -it cath2019/cathedral_studio:latest --network=django_network.

Теперь вы можете подключиться к базе данных postgres из вашего приложения django, используя имя хоста.

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'cath_local',
    'USER': 'postgres',
    'PASSWORD': 'mypass',
    'HOST': 'postgres',
    'PORT': '5432',
    'OPTIONS': {
      'client_encoding': 'UTF8',
    },
}

}

2. Docker-compose

Ознакомьтесь с официальной документацией Ссылка , чтобы докернизировать приложение django.

version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
0 голосов
/ 23 октября 2019

Использование только Docker

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

Оформить заказ этот ответ

Использование Docker Compose

version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

Источник: https://docs.docker.com/compose/django/

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