Невозможно подключить базу данных Oracle 19 к контейнеру Django с базой данных Oracle, запущенной в другом контейнере
Я довольно новичок в Docker и пытаюсь запустить приложение Django с базой данных Oracle 19 с помощью Docker благодаря файлу docker-compose.dev.yml
. Проблема в том, что мой контейнер базы данных работает, но не мое Django приложение, которое не может подключиться к базе данных. Вот файл :
version: "3.9"
services:
oracle-database:
image: icsvaccart/oracle19c:latest
volumes:
- ./data/db:/opt/oracle/oradata
ports:
- "1521:1521"
- "5500:5500"
django-back-end:
build: .
volumes:
- .:/app
ports:
- "8000:8000"
env_file:
- pythonPOC/.env
depends_on:
- oracle-database
Затем я выполнил команду docker compose -f docker-compose.dev.yml up --build
и через пару минут процесс завершился со следующими полными логами :
Мой контейнер django-back-end завершился со следующим сообщением об ошибке :
oracledb.exceptions.OperationalError: DPY-6005: невозможно подключиться к базе данных. Соединение не удалось с ошибкой "[Errno 99] Cannot assign requested address"
.
Я заметил в своем Docker Desktop, что мой контейнер oracle-database все еще запущен. Я успешно попытался получить доступ к моей базе данных Oracle из SQL Developer как SYS или с новым пользователем, которого я создал. Я выполнил SELECT SYSDATE FROM dual
и он возвращает текущую дату.
Если я пытаюсь запустить мой django-back-end с помощью python manage.py runserver
, все работает, и я могу получить доступ к моей базе данных Oracle, которая запущена в контейнере, запущенном ранее с помощью docker-compose. Обратите внимание, что я ничего не менял в своем файле .env
.
(venv) PS D:\Vianney\Documents\Projets\pythonPOC> python manage.py runserver
Do we have a good connection : True
Are we using a Thin connection : True
Database version : 19.3.0.0.0
Do we have a good connection : True
Are we using a Thin connection : True
Database version : 19.3.0.0.0
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
October 28, 2022 - 17:12:40
Django version 4.1.2, using settings 'pythonPOC.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Dockerfile
(корневой уровень) :
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt /app
RUN pip install -r requirements.txt
COPY . .
CMD python manage.py runserver
requirements.txt
:
asgiref==3.5.2
cffi==1.15.1
cryptography==38.0.1
distlib==0.3.6
Django==4.1.2
django-environ==0.9.0
filelock==3.8.0
oracledb==1.1.1
platformdirs==2.5.2
pycparser==2.21
sqlparse==0.4.3
tzdata==2022.5
virtualenv==20.16.6
settings.py
:
import environ
import oracledb
sys.modules["cx_Oracle"] = oracledb
# Initialise environment variables
env = environ.Env()
environ.Env.read_env()
con = oracledb.connect(user=env('DATABASE_USER'), password=env('DATABASE_PASSWORD'), dsn=env("DATABASE_DSN"),
port=env('DATABASE_PORT'))
print('Do we have a good connection :', con.is_healthy())
print('Are we using a Thin connection :', con.thin)
print('Database version :', con.version)
Мой файл .env
, который находится на том же уровне, что и settings.py
:
SECRET_KEY=<my_secret_key>
DEBUG=True
DATABASE_ENGINE=django.db.backends.oracle
DATABASE_NAME=ORCLCDB
DATABASE_USER=c##vaccart
DATABASE_PASSWORD=<my_password>
DATABASE_HOST=localhost
DATABASE_PORT=1521
DATABASE_DSN=localhost/ORCLCDB
Я застрял на два дня, поэтому любая помощь будет оценена по достоинству. Спросите меня, если вам нужно больше информации !
Я также попытался создать образ моего django-back-end и запустить его в надежде, что он подключится к базе данных Oracle. Получил то же сообщение об ошибке...