%20exista%20mesmo%20quando%20n%C3%A3o%20estiver%20em%20execu%C3%A7%C3%A3o%3F.png)
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.service
no 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_addresses
em seu Postgresql como '*'
, ele será vinculado ao 0.0.0.0
endereç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_hba
permitindo apenas conexões com os bancos de dados apropriados da sub-rede Docker, além de apenas autenticação unix local para a postgres
conta 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.