Docker cambia i porti pubblicati sul contenitore vivo

Vorrei per esempio modificare le porte pubblicate su un contenitore in diretta

docker run -p 80:80 --name nginx_live nginx 

E poi in seguito, cambialo quello in un'altra port, esempio -p 8080:80

Docker non dispone di un meccanismo per modificare le porte pubblicate di un contenitore una volta avviato. Quando pubblici un porto, accadono due cose:

  • Docker crea regole iptables nella tabella nat che reindirizzano il traffico alla port "pubblica" al contenitore.
  • Docker avvia un servizio proxy che ascolta in quella port per gestire traffico generato localmente.

Mentre in teoria potreste aggiornare manualmente le regole del firewall per rendere disponibile il servizio a una nuova port, non sarai in grado di rimuovere il proxy Docker e quindi non sarà in grado di avviare nuovi servizi utilizzando quella port "pubblica".

Il tuo miglior modo di operare è semplicemente quello di eliminare il contenitore e di ridisporlo, oppure contare su una sorta di proxy front-end per gestire il reindirizzamento anziché utilizzare il meccanismo di pubblicazione portuale di Docker.

Questa non è una funzionalità Docker.

Ma è facile aggiungere un altro livello di indirizzi: esporre una port di container al tuo host e quindi eseguire un'istanza di nginx o una regola di firewall FORWARD che mappe le porte locali desiderate su quella port docker-shared.