Я работаю над проектом django в целях обучения.Я создаю настройку docker-compose с контейнером db
(просто postgresql с парой настроек) и контейнером web
со стеком python-django.Вот упрощенная версия моего docker-compose.yml
файла:
version: '3'
services:
db:
image: postgres
expose:
- "5432"
web:
build: .
command: python /app/manage.py runserver 0.0.0.0:8000
depends_on:
- db
Это поднимает дБ.Я могу получить доступ к БД с моего хост-компьютера, что очень удобно, поскольку я могу легко просматривать базу данных и вносить некоторые изменения.
Я также могу использовать базу данных из экземпляра django в контейнере web
, просто используя db
в качестве имени хоста базы данных в конфигурации django.
Это означает, что если я хочу запустить тесты с хоста или запустить сервер и отладить его, я могу использовать localhost
как хост базы данных, и он будет подключаться, и если я хочу запустить приложение в «производственном» режиме из контейнера web
, я должен отредактировать настройки django, чтобы изменить хост базы данных.
Как мне справиться с этим несоответствием между «режимом отладки» и «производственным режимом»?Очевидно, я могу иметь флаг в файле настроек, который установлен или не зависит от переменной среды, или поместить само имя хоста db в переменную env, но это решение меня не совсем устраивает.
ПослеВ каком-то исследовании я наткнулся на этот старый вопрос , в ответе которого
Docker вскоре разрешит запустить контейнер, разделяющий пространство имен сети другого контейнера
и ссылки на эту очень интересную статью: Перемычки и программно-определяемый локальный хост
В соответствии с ними можно сослаться на порт localhost
в контейнере web
, азапрос будет перенаправлен на этот порт контейнера db
.Ну, я думаю, что это то, что я хочу.Но я не могу найти никаких других ссылок о том, как это сделать.
Наконец, я хотел бы спросить, не переусердствую ли я в чем-то или делаю что-то принципиально неправильное.