Taková nepraktická věc, kterou vlastně moc nechápu proč nejde udělat jednoduše. Máte kontejner, spuštěný třeba na portu 5566 a chcete (potřebujete) ho dát na jiný port. Nebo běží na nějaké vnější IP adrese, kterou potřebujete změnit. A ono to prostě nejde změnit.
Musíte kontejner zastavit (docker stop), poté ho odstranit (docker rm) a pak znovu spustit (docker run) s novým mapováním.
Což je mimochodem dost dobrý důvod k tomu, abyste si schovávali jak jste vlastně vytvořili kontejner na počátku. Nebo je nespouštěli z příkazové řádky, ale s pomocí YAML souborů (případně k tomu využívali něco jako Portainer)
A neméně důležité je, že kontejnery musí mít správně nastavené ukládání věci do patřičných volume/míst na disku. Protože pokud kontejner stopnete a odstraníte, tak přijdete o vše co není uložené někde “napevno”
TIP: Usnadnění aktualizace kontejnerů je možné přes watchtower. Jen pozor, nemá to žádné rozhraní a prostě to dělá svoji práci
Cesta před docker commit
Jiné možné řešení je vytvořit nové image (docker commit) a poté použít toto nové image pro spuštění s jinými parametry – v image se totiž uloží vše, kompletní stav kontejneru.
Změna konfiguračních souborů
Pro pokročilejší je tu možnost najít konfigurační soubor vašeho kontejneru – je v JSON formátu a bude v /var/cocker/contains/_ID_/ (kde _ID_ je ID vašeho kontejneru, dlouho šestnáctkové číslo získatelné třeba přes docker inspect
Konfigurační soubor ale můžete měnit jen v okamžiku kdy zastavíte kontejner (docker stop) a navíc zastavíte i docker jako takový (tedy například systemctl stop docker).
Pak už můžete v hostconfig.json měnit PortBindings a ExposedPorts.
Pak už jen spustit docker jako takový (systemctl start docker) a pak spustit váš kontejner (docker start). Jestli máte správně nové mapování pak ověřit přes docker ps.
