Newsletter 365tipů můžete číst zdarma. Placené předplatné je dobrovolná podpora, která pomáhá webu pokračovat.
Podpořit 365tipů

TIP#2961: Jak změnit mapování portů (či IP adresu) na které běží kontejner v Dockeru?

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