Como posso garantir que uma rede docker (interface) exista mesmo quando não estiver em execução?

Como posso garantir que uma rede docker (interface) exista mesmo quando não estiver em execução?

Eu tenho uma pilha de contêineres (especificada por a docker-compose.yml). A pilha requer um banco de dados PostgreSQL, mas estou usando uma instância nativa em execução localmente, em vez de fazer parte da pilha (para facilitar, por exemplo, backups e conservar recursos). A instância do PostgreSQL está configurada para vincular e escutar 172.17.0.1, o IP sob o qual o host pode ser acessado de dentro dos contêineres do Docker.

No entanto, durante a inicialização do sistema, o PostgreSQL não se vincula a esse endereço e os contêineres subsequentemente falham na inicialização. Se eu reiniciar o PostgreSQL posteriormente, posso ver que ele está vinculado (via ss) e os contêineres são inicializados corretamente. Isso é 100% reproduzível em todas as inicializações.

Acho que é porque a interface ainda não existe, então não há nada a que se vincular. Existe uma maneira de "persistir" na rede (ou na interface) para que ela possa ser vinculada mesmo quando o docker ainda não foi inicializado?

(Também tentei especificar After=docker.serviceno arquivo de serviço systemd para PostgreSQL, sem sorte - acho que é porque, embora o docker já tenha inicializado, as pilhas de contêineres não foram e, portanto, as redes ainda não foram criadas. Especificando " esperar até que um contêiner do docker seja iniciado" no systemd é impossível, pelo que sei.)

Responder1

Eu tenho lidado com o mesmo problema. Encontrei uma solução, mas você pode não gostar. Se você definir listen_addressesem seu Postgresql como '*', ele será vinculado ao 0.0.0.0endereço, que receberá tráfego de todas as interfaces. Confirmei que isso funciona bem em vários servidores.

Sim, é pecado permitir que seu servidor de banco de dados se vincule ao seu endereço público. Você já deve ter o UFW bloqueando o tráfego externo, além de uma configuração estritamente configurada, pg_hbapermitindo apenas conexões com os bancos de dados apropriados da sub-rede Docker, além de apenas autenticação unix local para a postgresconta de superusuário e senhas fortes para todas as outras contas, então suponho que seja seguro o suficiente. Funciona, pelo menos, e não consegui encontrar outra maneira de fazê-lo funcionar.

informação relacionada