Как заставить Django внутри сети docker compose распознавать имя службы postgres при использовании PyCharm?
Я возился с моим Dockerfile и Docker Compose, пытаясь заставить PyCharm запустить и отладить мое приложение django. Я определил, что мне нужно, чтобы все службы находились в одной сети, и разместил их в одной сети, но когда я выполняю команду runserver в конфигурации PyCharm, я получаю ошибку, что
django.db.utils.OperationalError: could not translate host name "postgres" to address: Name or service not known
Я пробовал настроить Dockerfile, чтобы переменные окружения выставлялись внутри него, а не в файле compose. А также сгруппировать все службы в одну сеть. Я в растерянности, куда двигаться дальше, поскольку большинство других вопросов на StackOverflow, связанных с этим, советуют мне делать то, что я уже пробовал
docker-compose.yml
version: "2"
services:
redis:
image: redis:latest # redis
restart: always
logging:
driver: "none"
networks:
- integration
postgres:
image: postgres:latest
restart: always
ports:
- "5400:5399"
volumes:
- /usr/lib/postgresql
- ./tmp:/dmp:ro
- ./load.sh:/usr/app/load.sh
environment:
POSTGRES_USER: vagrant
POSTGRES_PASSWORD: vagrant
POSTGRES_HOST_AUTH_METHOD: trust
logging:
driver: none
networks:
- integration
django:
build: .
command: "/bin/bash"
working_dir: /usr/app/
stdin_open: true
tty: true
volumes:
- ./tmp:/tmp
- ./:/usr/app
- ~/.ssh:/root/.ssh:ro
links:
- redis:redis
- postgres:postgres
depends_on:
- postgres
environment:
DJANGO_SETTINGS_MODULE: project.settings.docker_local
DJANGO_DEBUG: "true"
SSH_AUTH_SOCK: /tmp/authsock
logging:
driver: none
networks:
- integration
networks:
integration:
driver: bridge
Dockerfile
FROM python:latest
RUN echo "installing requirements"
COPY requirements/ /usr/app/reqs/
RUN pip install -r /usr/app/reqs/base.txt
RUN pip install -r /usr/app/reqs/local.txt
ENV DJANGO_SETTINGS_MODULE=project.settings.docker_local
COPY . /usr/app/
RUN echo "done"
Я подключил PyCharm к удаленному интерпретатору, живущему внутри службы django
, и он смог распознать все установленные пакеты.
У меня есть конфигурация docker-compose для создания контейнеров в PyCharm, и конфигурация Django Server для запуска команды runserver на службе Django.
Docker-Compose Config:
Django-Server Config:
Наконец, вот соответствующая часть моего файла настроек, docker_local.py
DATABASES = {
'default': dj_database_url.config(
default='postgres://vagrant:vagrant@postgres/vagrant'),
}
DATABASES['default']['ENGINE'] = 'django.contrib.gis.db.backends.postgis'
Любая помощь или совет будут высоко оценены.