2016-06-12 136 views
1

我需要一個更好的跟上時代的解決下列問題:泊塢窗容器主機路由

問題:我有手動創建爲了一個iptable的規則,允許從一個動態泊塢窗橋到主機的路由。否則,容器a無法連接到容器b,因爲默認情況下沒有從泊塢網絡到泊塢窗主機本身的路線。

我有以下設置:

container-nginx (docker) 
| 
|-container-jira (docker) (https://jira.example.com) 
|-container-confluence (docker) (https://confluence.example.com) 

爲了有正常吉拉和匯合之間Atlassian的應用程序鏈接:

我使用docker-compose作爲整個設置,並且所有容器都在同一個網絡中。默認情況下,這將不起作用,我將在兩個容器中爲主機confluence.example.com和jira.example.com獲取「無路由到主機」。因爲碼頭網絡內的每個容器都沒有到碼頭主機本身的路由。

目前,每次安裝程序初始化時,我都會手動創建一個iptable規則,從動態創建的具有標識「br-wejfiweji」的Docker橋到主機。

這很麻煩,在Docker 1.11.x中有沒有「一種新的方式」或「更好的方式」來做到這一點?

回答

1

docker-compose version 2確實創建了一個允許所有容器互相看到的網絡。請參閱「Networking in Compose」(因爲搬運工人1.10)

如果你的容器用正確的主機名創建的,那就是jira.example.comconfluence.example.com(見docker-compose.yml hostname directive),nginx的直接代理傳遞給jira.example.comconfluence.example.com
這兩個主機名將解析爲由docker-compose爲這3個(nginx,jira和confluence)容器創建的網絡內的正確IP地址。

我的意見建議,以使用alias的JIRA看到交匯的nginx(nginx的是別名匯合),爲了向JIRA訪問匯合時,總是使用nginx的。

version: '2' 

services: 
    # HTTPS-ReverseProxy 
    nginx: 
    image: blacklabelops/nginx 
    container_name: nginx 
    networks: 
     default: 
     aliases: 
      - 'crucible.example.com' 
      - 'confluence.example.com' 
      - 'crowd.example.com' 
      - 'bitbucket.example.com' 
      - 'jira.example.com' 
    ports: 
     - '443:443' 
+0

我已經在使用docker-compose 2.在我的情況下,路由必須是jira - > nginx(https) - > confluence。如何將多個主機名(例如jira.example.com,confluence.example.com)附加到我的一個nginx容器? – blacklabelops

+0

@maybeg version2意味着所有的容器互相看到:jira看到nginx和匯合。試着和'docker exec bash',看看你是否可以ping另外兩個容器。 – VonC

+0

我需要通過nginx進行路由,因爲每個實例都通過其https協議來對另一個實例進行地址轉換。應用程序鏈接被atlassian產品用於在ui內部生成鏈接。 http鏈接將在實例之間工作,是的,他們將ping和看到對方,但在ui內生成的http鏈接不會在瀏覽器內工作。 – blacklabelops