¿Cómo acceder a la database que se ejecuta en el host desde el interior del contenedor?

Ejecuto mi aplicación dentro de un contenedor y mapeo 8080 -> 5000 y funciona. Sin embargo, me gustaría acceder a la database Postgres que se ejecuta en el sistema HOST y no dentro de otro contenedor. Digamos que pg se ejecuta en postgres://localhost:5434/mydb : ¿cómo puedo conectarme a ese file desde mi contenedor de aplicaciones?

Aquí está mi docker-compose.yml

 web: image: myprofile/myimage:latest ports: - 8080:5000 

Desafortunadamente, no hay una respuesta simple a esta pregunta.

Básicamente tienes 2 opciones:

1) Use volumes para hacer que el zócalo esté disponible en el contenedor.

Las bases de datos, como postgres y mysql, admiten la escucha en sockets de dominio Unix en lugar de sockets TCP. Las ventajas aquí son que puede reenviar sockets de dominio Unix a un contenedor a través de una aplicación docker run -v assembly de volumen docker run -v

2) Use socat para proporcionar una connection localhost (127.0.0.1) tcp dentro del host desde un socket

Para las aplicaciones que solo usan sockets tcp, simplemente lanzo socat en la image, y la inicio en segundo plano dentro del contenedor (haciendo que escuche en 127.0.0.1, y lo reenvíe al socket con nombre).

Localhost en el host es local solamente. Solo puedes compartir el localhost si estás en el mismo espacio de nombres net. Entonces, puede --net=host o no usa localhost .

Comtesting cómo lidiar con un volumen en los docker docs

https://docs.docker.com/engine/userguide/dockervolumes/

la directiva VOLUME en un file Docker

https://docs.docker.com/engine/reference/builder/#volume

y el command -v de docker run

https://docs.docker.com/engine/reference/commandline/cli/#run

extraer

-v, --volume=[] Bind mount a volume