Я хотел бы запустить докеризованное приложение Django с докеризованным postgres.
Я запускаю докеризованное приложение Django с помощью:
docker run --rm --env-file /path/to/variables -d -p 8000:8000 django_app:test
Я запускаю докеризованное postgres с помощью:
docker run --rm -d --env-file /path/to/secrets/variables -p 5432:5432 \
-v "$PWD/my-postgres.conf":/etc/postgresql/postgresql.conf \
--mount src=/path/to/db/data,dst=/var/lib/postgresql/data,type=bind \
postgres:alpine -c 'config_file=/etc/postgresql/postgresql.conf'
мой конфиг postgres - это конфиг по умолчанию, который предлагается в документации по докеру контейнера postgres .По сути, это файл конфигурации, который содержит listen_addresses = '*'
Я использую одинаковые переменные среды для обоих контейнеров:
DJANGO_SETTINGS_MODULE=settings.module
PROJECT_KEY=xxyyzzabcdefg
DB_ENGINE=django.db.backends.postgresql
POSTGRES_DB=db_name
POSTGRES_USER=db_user
POSTGRES_PASSWORD=verydifficultpassword
POSTGRES_HOST=localhost # I've also tried to use 0.0.0.0
POSTGRES_PORT=5432
Мой модуль настроек Django для базы данных:
DATABASES = {
'default': {
'ENGINE': os.environ.get('DB_ENGINE'),
'NAME': os.environ.get('POSTGRES_DB'),
'USER': os.environ.get('POSTGRES_USER'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
'HOST': os.environ.get('POSTGRES_HOST'),
'PORT': os.environ.get('POSTGRES_PORT')
}
}
Однако я продолжаю получать:
django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "0.0.0.0" and accepting
TCP/IP connections on port 5432?
Dockerfiles для моего приложения django выглядит так:
FROM python:alpine3.7
COPY --from=installer /app /app
# required for postgres
COPY --from=installer /usr/lib /usr/lib
COPY --from=installer /usr/local/bin /usr/local/bin
COPY --from=installer /usr/local/lib /usr/local/lib
ARG SETTINGS_MODULE
WORKDIR /app
ENTRYPOINT python manage.py migrate &&\
python manage.py test &&\
python manage.py create_default_groups &&\
python manage.py set_screen_permissions &&\
python manage.py create_test_users &&\
python manage.py init_core &&\
python manage.py runserver 0.0.0.0:8000
Еще один интересный факт заключается в том, что еслиЯ запускаю приложение локально python manage.py runserver
и у меня запущен контейнер postgres, приложение, кажется, работает.
Может кто-нибудь помочь мне выяснить, почему я получаю отказ в соединении?Заранее спасибо!