Django/Docker/Postgresql: приложение подключилось к "неправильной" базе данных
Я разработал проект с Django/Docker/Postgresql и использую docker-compose для развертывания на удаленном сервере linux.
Я хочу развернуть 2 приложения, основанных на одном и том же коде (и одном файле настроек), preprod и demo, с двумя различными базами данных PostgreSQL (базы данных не докеризованы): ecrf_covicompare_preprod и ecrf_covicompare_demo, соответственно для preprod и demo. Тестирование приложений будет проводиться разными командами.
У меня есть :
- 2 файла docker-compose, docker-compose.preprod.yml и docker-compose.demo.yml, соответственно для preprod и demo .
- .env файлы, .env.preprod и .env.preprod.demo, соответственно для preprod и demo
Параметры подключения к базам данных задаются в этих .env файлах.
Но мои 2 приложения подключаются к одной и той же базе данных (ecrf_covicompare_preprod).
docker-compose.preprod.yml
version: '3.7'
services:
web:
restart: always
container_name: ecrf_covicompare_web
build:
context: ./app
dockerfile: Dockerfile.preprod
command: gunicorn core.wsgi:application --bind 0.0.0.0:8000
volumes:
- app_volume:/usr/src/app
- static_volume:/usr/src/app/static
- media_volume:/usr/src/app/media
expose:
- 8000
env_file:
- ./.env.preprod
entrypoint: [ "/usr/src/app/entrypoint.preprod.sh" ]
depends_on:
- redis
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8000/" ]
interval: 30s
timeout: 10s
retries: 50
redis:
container_name: ecrf_covicompare_redis
image: "redis:alpine"
celery:
container_name: ecrf_covicompare_celery
build:
context: ./app
dockerfile: Dockerfile.preprod
command: celery -A core worker -l info
volumes:
- app_volume:/usr/src/app
env_file:
- ./.env.preprod
depends_on:
- web
- redis
celery-beat:
container_name: ecrf_covicompare_celery-beat
build:
context: ./app
dockerfile: Dockerfile.preprod
command: celery -A core beat -l info
volumes:
- app_volume:/usr/src/app
env_file:
- ./.env.preprod
depends_on:
- web
- redis
nginx:
container_name: ecrf_covicompare_nginx
build: ./nginx
restart: always
volumes:
- static_volume:/usr/src/app/static
- media_volume:/usr/src/app/media
ports:
- 1370:80
depends_on:
- web
.env.preprod
SQL_DATABASE=ecrf_covicompare_preprod
SQL_USER=user_preprod
DATABASE=postgres
DJANGO_SETTINGS_MODULE=core.settings.preprod
docker-compose.demo.yml (упрощенный)
version: '3.7'
services:
demo_web:
container_name: ecrf_covicompare_web_demo
//
env_file:
- ./.env.preprod.demo
//
demo_redis:
container_name: ecrf_covicompare_redis_demo
image: "redis:alpine"
demo_celery:
container_name: ecrf_covicompare_celery_demo
//
env_file:
- ./.env.preprod.demo
depends_on:
- demo_web
- demo_redis
demo_celery-beat:
container_name: ecrf_covicompare_celery-beat_demo
//
env_file:
- ./.env.preprod.demo
depends_on:
- demo_web
- demo_redis
demo_nginx:
container_name: ecrf_covicompare_nginx_demo
//
ports:
- 1380:80
depends_on:
- demo_web
.env.preprod.demo
SQL_DATABASE=ecrf_covicompare_demo
SQL_USER=user_preprod
DATABASE=postgres
DJANGO_SETTINGS_MODULE=core.settings.preprod
Я новичок во всем, что касается docker compose, но для меня ваша конфигурация выглядит нормально. Несколько идей, которые у меня возникли:
Вы упоминаете две разные базы данных PostgreSQL. Они размещены на одном сервере PostgreSQL или на двух разных серверах? В обоих .env файлах вы установили DATABASE=postgres. Если они работают на одном сервере, я могу предположить, что это приведет к использованию одной и той же базы данных, в зависимости от того, как эта переменная будет использоваться в дальнейшем.
.Вы уверены, что переменные env установлены вовремя? Когда вы вручную проверяете их изнутри контейнера, они устанавливаются правильно. Но также во время загрузки контейнеров? Я не специалист в том, как docker compose обрабатывает эти файлы, но, возможно, вы можете попробовать распечатать переменные env во время инициализации контейнера из какого-нибудь скрипта.
Вы полностью уверены, что это не закодировано где-то? Может быть, попробуйте поискать во всех исходных файлах имя БД, к которой они оба подключаются. Я слишком часто терпел неудачу, чтобы не проверить это.
Надеюсь, это поможет. Это небольшое предположение, но в остальном ваша конфигурация кажется мне нормальной.
