2015-01-07 12 views
12

Mam wiele kontenerów doków na jednym komputerze. Na każdym kontenerze działa proces i serwer WWW, który udostępnia interfejs API dla tego procesu.Wiele kontenerów dookólnych jako serwer WWW na jednym IP

Moje pytanie brzmi: w jaki sposób mogę uzyskać dostęp do interfejsu API z przeglądarki, gdy domyślny port to 80? Aby mieć dostęp do serwera WWW wewnątrz pojemnika Döcker I wykonaj następujące czynności:

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

ten sposób można zrobić z moim terminalu komputery:

curl http://hostIP:80/foobar 

Ale jak sobie z tym poradzić z wieloma pojemnikami i wielokrotne serwery internetowe?

Odpowiedz

20

Można ujawnić wiele portów, np.

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

lub umieścić proxy (nginx, apache, lakiery, itp) przed kontenerów API.

Aktualizacja:

Najłatwiej zrobić pełnomocnika byłoby połączyć je do pojemników, na przykład API posiadające apache config

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

można uruchomić swoje pojemniki tak:

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> 

Może to być nieco kłopotliwe, ale jeśli trzeba zrestartować pojemniki api jako pojemnik proxy musiałyby zostać wznowiona albo (linki są dość statyczne w docker jeszcze). Jeśli stanie się to problemem, możesz przyjrzeć się metodom takim jak fig lub automatyczna aktualizacja konfiguracji proxy: http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/. Późniejszy link pokazuje również proxy z nginx.

Aktualizacja II:

w bardziej nowoczesne wersje dokowanym możliwe jest użycie user defined network zamiast linków podanych powyżej w celu przezwyciężenia niektórych niedogodności z nieaktualnych mechanizmu łączącego.

6

Tylko jeden proces może być powiązany z portem na raz. Tak więc uruchamianie wielu kontenerów oznacza, że ​​każdy będzie wystawiony na inny numer portu. Docker może to zrobić automatycznie za pomocą atrybutu "-P".

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

Możesz użyć poleceń "port dokowania" i "inspekcję dokowanego", aby zobaczyć rzeczywisty numer portu przydzielony do każdego kontenera.

Powiązane problemy