%20incluso%20cuando%20no%20se%20est%C3%A9%20ejecutando%3F.png)
Tengo una pila de contenedores (especificada por a docker-compose.yml
). La pila requiere una base de datos PostgreSQL, pero estoy usando una instancia nativa que se ejecuta localmente en lugar de que forme parte de la pila (por ejemplo, para facilitar las copias de seguridad y conservar recursos). La instancia de PostgreSQL está configurada para vincularse y escuchar en 172.17.0.1
, la IP bajo la cual se puede acceder al host desde los contenedores acoplables.
Sin embargo, durante el inicio del sistema, PostgreSQL no se vincula a esa dirección y, posteriormente, los contenedores no se inicializan. Si reinicio PostgreSQL después, puedo ver que está vinculado (a través de ss
) y los contenedores se inicializan bien. Esto es 100% reproducible en cada arranque.
Creo que es porque la interfaz aún no existe, por lo que no hay nada a lo que vincularse. ¿Hay alguna manera de "persistir" en la red (o la interfaz) para que pueda vincularse incluso cuando la ventana acoplable aún no se ha inicializado?
(También intenté especificar After=docker.service
en el archivo de servicio systemd para PostgreSQL, sin suerte; creo que es porque, si bien Docker ya se ha inicializado, las pilas de contenedores no, por lo que las redes tampoco se han creado aún. Especificando " esperar hasta que se haya iniciado un contenedor acoplable" en systemd es imposible, hasta donde yo sé).
Respuesta1
He estado lidiando con el mismo problema. Encontré una solución, pero puede que no te guste. Si configura listen_addresses
su Postgresql en '*'
, se vinculará a la 0.0.0.0
dirección, que recibirá tráfico de todas las interfaces. He confirmado que esto funciona correctamente en varios servidores.
Sí, es un pecado permitir que su servidor de base de datos se vincule a su dirección pública. Sin embargo, ya debería tener UFW bloqueando el tráfico externo, además de una configuración estricta que pg_hba
solo permita conexiones a las bases de datos apropiadas desde la subred de Docker, además de solo autenticación local de Unix para la postgres
cuenta de superusuario y contraseñas seguras para todas las demás cuentas, por lo que supongo que es lo suficientemente seguro. Al menos funciona y no he podido encontrar otra forma de hacerlo funcionar.