Вам необходимо добавить переменные окружения к вашему webapp
. Таким образом, ваш docker -компонентный файл становится;
version: '3.7'
services:
web:
build: .
command: python /profi/manage.py runserver 0.0.0.0:8000
environment:
DJANGO_SETTINGS_MODULE: "project.settings.development"
DEBUG: 1
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
POSTGRES_HOST: db
volumes:
- .:/profi
ports:
- "${HTTP_PORT:-8000}:8000"
depends_on:
- db
db:
image: postgres:11
volumes:
- postgres_data:/var/lib/posgresql/data/
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
POSTGRES_HOST: db
ports:
- "${DB_PORT:-5432}:5432"
volumes:
postgres_data:
Таким образом, ваша база данных будет настроена с нужными вам переменными среды, ваше веб-приложение будет иметь эти переменные среды, и вы уже получили django слушаю их. Поэтому django больше не будет прослушивать localhost
для подключения к базе данных, он будет использовать db
в качестве docker имени хоста для экземпляра postgres.
О, и не Передайте ваш секретный ключ как переменную среды, которая только добавляет потенциал для проблем безопасности. Установите DJANGO_SETTINGS_MODULE
в качестве переменной среды, а затем django будет знать, где искать ваш секретный ключ и другие параметры.
Для запуска проекта в docker и в venv, или даже в нескольких В то же время вы можете использовать переменные окружения для HTTP_PORT
и DB_PORT
, чтобы порты на вашей машине могли отображаться в контейнер.
Например, вы можете запустить сервер postgres на вашем машина на порту 5432, а порт в контейнере db
будет портом 5432. Установив свой файл compose, как указано выше, вы можете установить переменную окружения DB_PORT
равной 54321, и она сможет работать рядом с вашим локальным хостом.