2016-06-12 144 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