1

I am having an issue connecting my Django app to a Google Cloud Postgres database through Cloud SQL proxy when using Docker. The error I keep getting is 'connection refused'. Here's the error output

cloud-sql-proxy_1  | 2021/12/30 19:11:30 current FDs rlimit set to 1048576, wanted limit is 8500. Nothing to do here.
cloud-sql-proxy_1  | 2021/12/30 19:11:30 using credential file for authentication; email=serviceacc@gamr-335802.iam.gserviceaccount.com
cloud-sql-proxy_1  | 2021/12/30 19:11:30 Listening on 127.0.0.1:5432 for gamr-335802:us-central1:gamr
cloud-sql-proxy_1  | 2021/12/30 19:11:30 Ready for new connections
cloud-sql-proxy_1  | 2021/12/30 19:11:30 Generated RSA key in 140.67675ms
gamr-backend_1     | Performing system checks...
gamr-backend_1     | 
gamr-backend_1     | System check identified no issues (0 silenced).
gamr-backend_1     | Traceback (most recent call last):
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 230, in ensure_connection
gamr-backend_1     |     self.connect()
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 25, in inner
gamr-backend_1     |     return func(*args, **kwargs)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 211, in connect
gamr-backend_1     |     self.connection = self.get_new_connection(conn_params)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 25, in inner
gamr-backend_1     |     return func(*args, **kwargs)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 199, in get_new_connection
gamr-backend_1     |     connection = Database.connect(**conn_params)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect
gamr-backend_1     |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
gamr-backend_1     | psycopg2.OperationalError: could not connect to server: Connection refused
gamr-backend_1     |    Is the server running locally and accepting
gamr-backend_1     |    connections on Unix domain socket "/cloudsql/gamr-335802:us-central1:gamr/.s.PGSQL.5432"?
gamr-backend_1     | 
gamr-backend_1     | 
gamr-backend_1     | The above exception was the direct cause of the following exception:
gamr-backend_1     | 
gamr-backend_1     | Traceback (most recent call last):
gamr-backend_1     |   File "manage.py", line 22, in <module>
gamr-backend_1     |     main()
gamr-backend_1     |   File "manage.py", line 18, in main
gamr-backend_1     |     execute_from_command_line(sys.argv)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 425, in execute_from_command_line
gamr-backend_1     |     utility.execute()
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute
gamr-backend_1     |     self.fetch_command(subcommand).run_from_argv(self.argv)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 373, in run_from_argv
gamr-backend_1     |     self.execute(*args, **cmd_options)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 66, in execute
gamr-backend_1     |     super().execute(*args, **options)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 417, in execute
gamr-backend_1     |     output = self.handle(*args, **options)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 101, in handle
gamr-backend_1     |     self.run(**options)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 110, in run
gamr-backend_1     |     self.inner_run(None, **options)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 127, in inner_run
gamr-backend_1     |     self.check_migrations()
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 505, in check_migrations
gamr-backend_1     |     executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in __init__
gamr-backend_1     |     self.loader = MigrationLoader(self.connection)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 53, in __init__
gamr-backend_1     |     self.build_graph()
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 223, in build_graph
gamr-backend_1     |     self.applied_migrations = recorder.applied_migrations()
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
gamr-backend_1     |     if self.has_table():
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 55, in has_table
gamr-backend_1     |     with self.connection.cursor() as cursor:
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 25, in inner
gamr-backend_1     |     return func(*args, **kwargs)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 270, in cursor
gamr-backend_1     |     return self._cursor()
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 246, in _cursor
gamr-backend_1     |     self.ensure_connection()
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 25, in inner
gamr-backend_1     |     return func(*args, **kwargs)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 230, in ensure_connection
gamr-backend_1     |     self.connect()
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
gamr-backend_1     |     raise dj_exc_value.with_traceback(traceback) from exc_value
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 230, in ensure_connection
gamr-backend_1     |     self.connect()
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 25, in inner
gamr-backend_1     |     return func(*args, **kwargs)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 211, in connect
gamr-backend_1     |     self.connection = self.get_new_connection(conn_params)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 25, in inner
gamr-backend_1     |     return func(*args, **kwargs)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 199, in get_new_connection
gamr-backend_1     |     connection = Database.connect(**conn_params)
gamr-backend_1     |   File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect
gamr-backend_1     |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
gamr-backend_1     | django.db.utils.OperationalError: could not connect to server: Connection refused
gamr-backend_1     |    Is the server running locally and accepting
gamr-backend_1     |    connections on Unix domain socket "/cloudsql/gamr-335802:us-central1:gamr/.s.PGSQL.5432"?
gamr-backend_1     | 

and here is my docker compose file

version: '3'
services:

  cloud-sql-proxy:
    image: gcr.io/cloudsql-docker/gce-proxy
    command: /cloud_sql_proxy -dir=/cloudsql -instances=gamr-335802:us-central1:gamr=tcp:127.0.0.1:5432 -credential_file=/django_backend/cloud/gamr-335802-e8f23fcc176c.json
    ports:
      - "127.0.0.1:5432:5432"
    volumes:
      - /cloudsql:/cloudsql
      - ./django_backend/cloud/gamr-335802-e8f23fcc176c.json:/django_backend/cloud/gamr-335802-e8f23fcc176c.json
    restart: always
    expose:
      - "5432"

  gamr-backend:
    build: django_backend/

    command: ./docker.sh

    volumes:
      - .:/django
      - /cloudsql:/cloudsql

    ports:
      - "8000:8000"

    depends_on:
      - cloud-sql-proxy

Because they are different services, they are running in different containers. Is there a way I can connect them? My Django app tries to connect at localhost:5432 but can't reach the proxy server. I'm really new to Docker and GCP so I've been stuck on this for a bit, any help would be appreciated!

frelmaster
  • 11
  • 1

0 Answers0