Проблема при развертывании моего приложения django на рендере с докеризованной базой данных

У меня возникли проблемы при развертывании моего Django-приложения на рендере. Я использовал базу данных Postgres, которая истекла и была удалена. Поэтому я пытаюсь использовать докеризованную базу данных, чтобы она не имела ограничений по времени и была доступна в течение всей жизни. После контейнеризации моего Django-приложения оно хорошо работает на моей локальной машине, и я могу выложить его на хаб docker. Неважно, поскольку мое приложение было предварительно развернуто и настроено в основной ветке. У меня возникает следующая ошибка:

OperationalError at /

could not translate host name "db_social" to address: Name or service not known

Request Method:     GET
Request URL:    https://network-project-5q7j.onrender.com/
Django Version:     5.0
Exception Type:     OperationalError
Exception Value:    

could not translate host name "db_social" to address: Name or service not known

Exception Location:     /opt/render/project/src/.venv/lib/python3.11/site-packages/psycopg2/__init__.py, line 122, in connect
Raised during:  network.views.index
Python Executable:  /opt/render/project/src/.venv/bin/python3.11
Python Version:     3.11.3
Python Path:    

['/opt/render/project/src',
 '/opt/render/project/src/.venv/bin',
 '/opt/render/project/python/Python-3.11.3/lib/python311.zip',
 '/opt/render/project/python/Python-3.11.3/lib/python3.11',
 '/opt/render/project/python/Python-3.11.3/lib/python3.11/lib-dynload',
 '/opt/render/project/src/.venv/lib/python3.11/site-packages']

Server time:    Fri, 23 Aug 2024 10:12:12 +0000

Вот что я получил при рендеринге.

Я хотел бы поделиться своими docker-compose.yml

version: "3.11"

services:
  db_social:
    image: postgres
    volumes:
      - ./data/db_social:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=social 
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=qnr63363

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db_social

Мой dockerfile здесь:

FROM python:3.11
ENV PYTHONUNBUFFERED=1
WORKDIR /code/
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

Вот конфигурация базы данных моего settings.py файла.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'social',
        'USER': 'postgres',
        'PASSWORD': 'qnr63363',
        'HOST': 'db_social',  
        'PORT': '5432',
    }
    # {
    #     'ENGINE': 'django.db.backends.postgresql_psycopg2',
    #     'NAME': 'postgres',
    #     'USER': 'postgres',
    #     'HOST': '127.0.0.1',
    #     'PORT': '5432',
    #     'PASSWORD': 'qnr63363'
    # }
}

Я что-то пропустил? В чем проблема?

Вы должны установить container_name на свои службы, особенно на службу базы данных. Если вы этого не сделаете, он создаст производное имя, и вы не сможете ожидать, что оно будет таким, каким вы его ожидаете.

...
services:
  db_social:
    image: postgres
    container_name: db_social
...
Вернуться на верх