2015-01-07 39 views
12

Ho più contenitori finestra mobile su una singola macchina. Su ogni contenitore è in esecuzione un processo e un server Web che fornisce un'API per il processo.Più contenitori docker come server Web su un singolo IP

La mia domanda è, come posso accedere all'API dal mio browser quando la porta predefinita è 80? Per essere in grado di accedere al server Web all'interno del contenitore finestra mobile faccio la seguente:

sudo docker run -p 80:80 -t -i <yourname>/<imagename> 

In questo modo posso fare dal mio terminale computer:

curl http://hostIP:80/foobar 

Ma come gestire questo con più contenitori e multipla server web?

risposta

20

È possibile esporre più porte, ad es.

docker run -p 8080:80 -t -i <yourname>/<imagename> 
docker run -p 8081:80 -t -i <yourname1>/<imagename1> 

o mettere un proxy (nginx, apache, vernici, ecc), di fronte ai vostri contenitori API.

Aggiornamento:

Il modo più semplice per fare un proxy sarebbe di collegarlo ai contenitori API, ad esempio avendo apache config

RewriteRule ^api1/(.*)$ http://api1/$1 [proxy] 
RewriteRule ^api2/(.*)$ http://api2/$1 [proxy] 

si può eseguire i vostri contenitori in questo modo:

docker run --name api1 <yourname>/<imagename> 
docker run --name api2 <yourname1>/<imagename1> 
docker run --link api1:api1 --link api2:api2 -p 80:80 <my_proxy_container> 

Questo potrebbe essere un po 'ingombrante ma se avete bisogno di riavviare i contenitori api come il contenitore procura avrebbe dovuto essere riavviato o (i collegamenti sono abbastanza statici nella finestra mobile ancora). Se questo diventa un problema, potresti dare un'occhiata ad approcci come fig o configurazione proxy autorizzata: http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/. Il collegamento successivo mostra anche il proxy con nginx.

Aggiornamento II:

In versioni più moderne della finestra mobile è possibile utilizzare user defined network al posto dei link sopra riportati per superare alcuni degli inconvenienti del meccanismo di collegamento deprecato.

6

Solo un singolo processo può essere associato a una porta alla volta. Quindi eseguire più contenitori significa che ciascuno sarà esposto su un numero di porta diverso. Docker può farlo automaticamente per te usando l'attributo "-P".

sudo docker run -P -t -i <yourname>/<imagename> 

È possibile utilizzare la "porta finestra mobile" e "docker ispezionare" comandi per visualizzare il numero di porta effettivo assegnato a ciascun contenitore.

Problemi correlati