Porte Docker dopo il riavvio¶
Il sintomo¶
Dopo un riavvio alcuni container risultano "Up" ma non rispondono. docker ps non mostra le porte pubblicate, e docker restart non cambia nulla.
La causa¶
I container pubblicano una porta su un indirizzo specifico che all'avvio non esiste ancora. Succede, per esempio, quando l'indirizzo è quello della rete privata e il client della rete privata gira a sua volta in un container: Docker avvia tutto insieme, il collegamento della porta fallisce e non viene ritentato.
ports:
- "100.64.0.10:8080:8080" # l'indirizzo compare solo dopo l'avvio della VPN
Il rimedio¶
Riavviare non basta: il container va ricreato, perché le porte si assegnano alla creazione.
docker compose up -d --force-recreate nome-servizio
Renderlo automatico¶
Un servizio che parte dopo Docker e:
- aspetta che l'indirizzo esista;
- confronta, per ogni container in esecuzione, le porte dichiarate con quelle davvero attive;
- ricrea dal compose quelli che non coincidono, leggendo cartella e file dalle etichette
com.docker.compose.*del container.
Una modalità di sola verifica, che elenca senza toccare, serve a controllare prima di fidarsi.
Alternative¶
- Pubblicare su tutti gli indirizzi e limitare l'accesso con il firewall.
- Installare il client della rete privata sul sistema, non in un container.