Vai al contenuto

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:

  1. aspetta che l'indirizzo esista;
  2. confronta, per ogni container in esecuzione, le porte dichiarate con quelle davvero attive;
  3. 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.