¿Cómo conectarse a la base de datos Postgres en Docker en Windows 10 usando SQLAlchemy?

He configurado una base de datos temporal de Postgres para realizar pruebas en mi computadora usando Docker y los siguientes comandos:

1)

sudo docker run --name some-postgres6 -e POSTGRES_PASSWORD=mysecretpassword -p 5430:5432 postgres:9.1 -d postgres 

2)

 sudo docker run -it --rm --link some-postgres6:postgres postgres psql -h postgres -U postgres 

Quiero conectarme a la base de datos usando Python:

 from sqlalchemy.engine import create_engine import psycopg2 engine = create_engine('postgresql+psycopg2://postgres:mysecretpassword@localhost/mydb?port=5432') ### IMPORTANT!!! connection = engine.connect() 

Entonces estoy recibiendo este error:

 psycopg2.OperationalError: could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432? 

Esta misma pieza de código solía funcionar en mi otra máquina donde estaba ejecutando Ubuntu. Supongo que esto tiene que ver con las ventanas. Estoy ejecutando Windows 10 Home (no tengo experiencia con Windows) y uso la caja de herramientas de Docker.

Finalmente me di cuenta del problema. Era ” localhost “, no había nada corriendo en 127.0.0.1.

Tuve que cambiarlo a la IP de la máquina docker. Esta información se muestra si abre la Terminal de inicio rápido de Docker . Muestra algo como “la docker is configured to use the default machine with IP 192.168.XX.XXX

Otra forma de encontrar esta IP es abrir el Monitor de recursos , vaya a la pestaña Red y luego verifique las conexiones TCP . Debería haber un docker.exe ejecución. La IP que se muestra en la columna de Dirección Remota es la que funcionará.

Finalmente el comando correcto:

 engine = create_engine('postgresql+psycopg2://postgres:mysecretpassword@192.168.XX.XXX/mydb?port=5430') 

No estoy seguro si este es solo un error tipográfico en su ejemplo, pero está asignando su contenedor de Postgres en su primer fragmento de código al puerto 5430. Si esto es correcto, tendrá que cambiar su cadena de conexión a lo siguiente:

 engine = create_engine('postgresql+psycopg2://postgres:mysecretpassword@localhost/mydb?port=5430') ### IMPORTANT!!!