2016-04-04 5 views
3

Мой вопрос похож на вопрос this, но только с одним доменом.Контейнеры Mulitple Docker на порте 80 с тем же доменом

Возможно ли запускать несколько контейнеров докеров на одном сервере, все они на порту 80, но с разными URL-адресами?

Например:

Внутри все приложения размещены на том же сервере Докер.

172.17.0.1:8080 => app1 
172.17.0.2:8080 => app2 
172.17.0.3:8080 => app3 

Внешне, пользователи будут получать доступ к приложениям по следующим адресам:

www.mydomain.com     (app1) 
www.mydomain.com/app/app2  (app2) 
www.mydomain.com/app/app3  (app3) 
+0

Вы можете использовать nginx для установки маршрутизации в разные приложения. Вы можете обратиться к этому, например, о том, как это сделать - http://stackoverflow.com/questions/19108044/nginx-routing-path-to-server – lamirap

+0

Несколько контейнеров ** не могут ** слушать на том же порту. В более общем смысле, единственный процесс может привязываться к сокету (ip: порт). Для вашей потребности требуется обратный прокси (например, nginx). – Auzias

+0

@Auzias Они могут иметь каждое собственное пространство имен, таким образом, они могут выполнять точно такие же операции. Однако они не могут быть привязаны к одному и тому же порту на главной машине, поскольку один и тот же порт можно использовать только один раз. Решением здесь является привязка каждого контейнера к другому порту на главной машине и использование i.e nginx для выполнения маршрутизации на основе URL-адреса – buddy123

ответ

3

Я решил эту проблему с Nginx обратного прокси-сервером.

Вот Dockerfile для контейнера Nginx:

FROM nginx 
COPY nginx.conf /etc/nginx/nginx.conf 

И это nginx.conf:

http { 

     server { 
       listen 80; 

       location/{ 
       proxy_pass http://app1:5001/; 
       } 

       location /api/ { 
       proxy_pass http://app2:5000/api/; 
       } 
     } 
} 

Я встал на Nginx, APP1 и app2 контейнеров внутри одной и той же Docker сети.

Обязательно включите трейлинг-код / в расположение и прокси-маршруты, в противном случае nginx вернет «502: Плохой шлюз».

Все запросы проходят через хост докера на порт 80, который передает их в контейнер nginx, который затем пересылает их в контейнеры приложений на основе URL-адреса.

Смежные вопросы