Проблема при развертывании моего приложения 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
...