Сервер Django, запущенный на экземпляре GCE, не может подключиться к облачному SQL postgres
У меня есть docker-compose
, который имеет django
и nginx
в качестве обратного прокси
docker-compose.yml:
version: "3"
services:
app:
restart: always
command: ./startup.sh
image: region-docker.pkg.dev/project_id/repo/image:tag
container_name: backend
expose:
- "8000"
volumes:
- static_volume:/code/static
hostname: app
nginx:
restart: always
image: region-docker.pkg.dev/project_id/repo/image:tag
volumes:
- static_volume:/code/static
ports:
- "80:80"
depends_on:
- app
volumes:
static_volume:
конфигурация переменных соединения с базой данных в settings.py
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'Instance': 'project_id:region:instance_name',
'NAME': 'database_name',
'USER': 'username',
'PASSWORD': 'password',
'HOST': 'database_internal_IP',
'PORT': '5432',
}
}
когда я запускаю docker-compose up
в VMs CLI, nginx работает отлично, но серверы django работают с этой ошибкой
django.db.utils.OperationalError: could not connect to server: Connection timed out
backend | Is the server running on host "instance-private-IP" and accepting
backend | TCP/IP connections on port 5432?
Примечание: когда я запускаю psql -h instance-private-IP -U username
соединение успешно устанавливается
Примечание: когда я запускаю точно такой же контейнер на своем локальном ПК с теми же конфигурациями, только с публичным IP вместо частного IP, контейнер работает просто отлично
Примечание: учетная запись службы, прикрепленная к ВМ, имеет доступ к облачному SQL включенному
После многочисленных попыток перенастроить все (docker-compose, Django, конфигурацию виртуальной машины)
Ничего не помогло. Подозрительно, что для меня сработало перезапускание экземпляра VM.
Надеюсь, это сэкономит кому-нибудь время.