2014-07-10 17 views
8

Sto eseguendo un contenitore (chiamiamolo old_container) con exposed porta 80 e associare la porta all'interfaccia host sulla porta 80 utilizzando il flag -p.Legenda porta mobile Docker

sudo finestra mobile run -p 80:80 -i -t < old-image-id>

Nel mio ambiente di produzione voglio passare ora dalla old_container ad un new_container. Quindi voglio chiudere lo old_container e avviare lo new_container.

Per prima cosa devo apportare alcune modifiche manuali allo new_container. Quindi lo eseguo senza il flag -p, poiché non riesco a collegarlo alla porta 80 prima di aver apportato queste modifiche.

sudo docker run -i -t < new-image-id > 
#now I m doing my manual changes 

Quando ho finito con i miei cambiamenti che ho logout del new_container. Il mio piano era ora di fermare il old_container e legare il new_container alla porta 80. Ma il comando [start][1] non fornisce una possibilità di associazione delle porte.

Quindi, per venire alla mia domanda: Sto cercando di impostare il binding di porta per un contenitore fermo, preferibilmente senza la soluzione alternativa di creare un'immagine di commit del new_container e l'esecuzione di questa immagine come un altro nuovo contenitore.

+0

Si potrebbe dare un'occhiata a [questa domanda] (http://stackoverflow.com/questions/19897743/exposing-a-port-on-a-live-docker-container?rq=1) – icecrime

+0

Do non come la risposta :) Lascia la domanda aperta. Probabilmente ci sarà un modo per farlo in futuro –

risposta

0

Il tuo caso d'uso sembra buono, è piuttosto interessante vedere la finestra mobile su PROD. Qual è il cambiamento manuale che stai per fare? Anche se, suppongo che la soluzione al vostro problema potrebbe essere

1) Collegamento & staccando un contenitore (How do I attach to a running Docker container later?)

docker attach container_name ctrl p ctrl q

2) comando finestra mobile exec Esecuzione

docker run -it -p 80:80 --name=old_container <old-image-id>

Il il comando precedente creerà un contenitore chiamato "old_container"

docker exec -d <old_container> mkdir foo

Il comando precedente creerà la directory foo sulla cartella principale del contenitore in esecuzione. Credo che si può includere le modifiche manuali come uno script al posto di 'mkdir foo' (non ho mai provato)

PS: finestra mobile exec è disponibile solo dalla finestra mobile versione 1.3

0

ho fatto creare un tool per change PORT of Running Container per myboot2docker.

Es: due (2) contenitore:

  • finestra mobile run -p 11521 1521 --name = XE1 container1
  • finestra mobile run -p 21521 1521 --name = XE3 container3

creo un'altra porta-mapping per container1 utilizzare questo comando

p-map xe1 15210:1521 

e poi si collega la Java appl Primavera icazione a localhost: 15210

per passare alla container3 sufficiente digitare questo comando

p-map xe3 15210:1521 

sotto sono dettagli comando in azione.

~ $ p-map 
Change port of running container 
Command: p-map <container_name> <host_port:guest_port> 

DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:21521 to:172.17.0.1:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:11521 to:172.17.0.2:1521 

~ $ p-map xe1 15210:1521 
Change port of running container 

sudo iptables -t nat -A DOCKER -p tcp --dport 15210 -j DNAT --to-destination 172.17.0.1:1521 

DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:21521 to:172.17.0.1:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:11521 to:172.17.0.2:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:15210 to:172.17.0.1:1521 -- 

~ $ p-map xe2 15210:1521 
Change port of running container 
Error: No such image or container: xe2 

DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:21521 to:172.17.0.1:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:11521 to:172.17.0.2:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:15210 to:172.17.0.1:1521 -- 

~ $ p-map xe3 15210:1521 
Change port of running container 

sudo iptables -t nat -D DOCKER -p tcp --dport 15210 -j DNAT --to-destination 172.17.0.1:1521 
sudo iptables -t nat -A DOCKER -p tcp --dport 15210 -j DNAT --to-destination 172.17.0.2:1521 

DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:21521 to:172.17.0.1:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:11521 to:172.17.0.2:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:15210 to:172.17.0.2:1521 -- 
0

Una volta che si esegue la vostra immagine new_container e apportare le modifiche desiderate, salvare il nuovo contenitore come una nuova immagine utilizzando docker commit. quindi eseguire questa nuova immagine con -p flag per mappare le porte.

Problemi correlati