I am trying to connect to postgres container using...
# rancher-desktop
r
I am trying to connect to postgres container using rancher in my macos but it is giving me an error as below test_write_schema.py::test_postgres3 ============================== 1 failed in 2.99s =============================== FAILED [100%]127.0.0.1 32803 test test test Pulling image testcontainers/ryuk:0.8.1 Container started: 53b8c8fb7b69 Waiting for container <Container: 53b8c8fb7b69> with image testcontainers/ryuk:0.8.1 to be ready ... Pulling image postgres:16 Container started: fae4ae6fd8f6 Waiting for container <Container: fae4ae6fd8f6> with image postgres:16 to be ready ... Waiting for container <Container: fae4ae6fd8f6> with image postgres:16 to be ready ... Waiting for container <Container: fae4ae6fd8f6> with image postgres:16 to be ready ... tests/postgres/test_write_schema.py:48 (test_postgres3) def test_postgres3() -> None: with PostgresContainer("postgres:16") as postgres: connection_url = postgres.get_connection_url() import sqlalchemy.engine.url as sa_url url = sa_url.make_url(connection_url) # Connect using extracted parts # conn = psycopg2.connect( # host=url.host, # port=url.port, # dbname=url.database, # user=url.username, # password=url.password, # ) host = "127.0.0.1" #postgres.get_container_host_ip() port = postgres.get_exposed_port(postgres.port) dbname = "test" user = "test" password = "test" print(host, port, dbname, user, password) # Connect to the Postgres database
conn = psycopg2.connect(
host=host, port=port, dbname=dbname, user=user, password=password, ) test_write_schema.py72 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ dsn = 'host=127.0.0.1 port=32803 dbname=test user=test password=test' connection_factory = None, cursor_factory = None kwargs = {'dbname': 'test', 'host': '127.0.0.1', 'password': 'test', 'port': '32803', ...} kwasync = {} def connect(dsn=None, connection_factory=None, cursor_factory=None, **kwargs): """ Create a new database connection. The connection parameters can be specified as a string: conn = psycopg2.connect("dbname=test user=postgres password=secret") or using a set of keyword arguments: conn = psycopg2.connect(database="test", user="postgres", password="secret") Or as a mix of both. The basic connection parameters are: - dbname: the database name - database: the database name (only as keyword argument) - user: user name used to authenticate - password: password used to authenticate - host: database host address (defaults to UNIX socket if not provided) - port: connection port number (defaults to 5432 if not provided) Using the connection_factory parameter a different class or connections factory can be specified. It should be a callable object taking a dsn argument. Using the cursor_factory parameter, a new default cursor factory will be used by cursor(). Using async=True an asynchronous connection will be created. async_ is a valid alias (for Python versions where ``async`` is a keyword). Any other keyword parameter will be passed to the underlying client library: the list of supported parameters depends on the library version. """ kwasync = {} if 'async' in kwargs: kwasync['async'] = kwargs.pop('async') if 'async_' in kwargs: kwasync['async_'] = kwargs.pop('async_') dsn = _ext.make_dsn(dsn, **kwargs)
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
E psycopg2.OperationalError: connection to server at "127.0.0.1", port 32803 failed: Connection refused E Is the server running on that host and accepting TCP/IP connections? ../../.venv/lib/python3.11/site-packages/psycopg2/__init__.py122 OperationalError
c
The
testcontainers/ryuk:0.8.1
runs inside kubernetes, so the
127.0.0.1
refers to the pod that runs the test container, not the macOS machine.
127.0.0.1:32803
is how you, from your laptop, outside kubernetes can access the postgres container. The test container needs to call the postgres service name as a hostname and the postgres service port as port, not the NodePort