2016-06-12 18 views
1

Ich brauche eine bessere up-to-date-Lösung folgendes Problem:Docker Container Host Routing

Problem: Ich muss manuell eine iptable Regel erstellen, um eine Route von einem dynamisch Andockfenster Brücke mit dem Host zu ermöglichen, . Andernfalls kann Container a keine Verbindung zu Container b herstellen, da standardmäßig keine Route von einem Andocknetzwerk zum Andock-Host selbst vorhanden ist.

Ich habe folgendes Setup:

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

Um richtig zu haben Links Anwendung Atlassian funktionieren zwischen Jira und Confluence:

Ich benutze Docker-Compose für das gesamte Setup und alle Container sind im selben Netzwerk. Standardmäßig funktioniert das nicht. Ich erhalte in beiden Containern für die Hosts confluence.example.com und jira.example.com keine Route zum Host. Weil jeder Container im Andocknetzwerk keine Route zum Andock-Host selbst hat.

Momentan erstelle ich jedes Mal, wenn das Setup initialisiert wird, manuell eine iptable-Regel von der dynamisch erstellten Docker-Bridge mit der ID "br-wejfiweji" an den Host.

Dies ist umständlich, gibt es "einen neuen Weg" oder "besseren Weg", dies in Docker 1.11.x zu tun?

Antwort

1

docker-compose Version 2 erstellt ein Netzwerk, das es allen Containern ermöglicht, sich gegenseitig zu sehen. Siehe "Networking in Compose" (seit Docker 1.10)

Wenn Ihre Behälter mit dem richtigen Hostnamen erstellt werden, ist, dass jira.example.com und confluence.example.com (siehe docker-compose.yml hostname directive), nginx direkt an jira.example.com und confluence.example.com Proxy-passieren kann.
Diese zwei Hostnamen werden in die richtige IP-Adresse innerhalb des Netzwerks aufgelöst, das von docker-compose für diese 3 Container (nginx, jira und confluence) erstellt wurde.

schlage ich im Kommentar ein alias um jira zu verwenden Einmündung als nginx (nginx Aliase ist zur Konfluenz), um zu sehen, für jira um immer nginx zu verwenden, wenn Einmündung erreichbar.

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

Ich benutze bereits docker-compose 2. In meinem Fall muss die Route jira -> nginx (https) -> Konfluenz sein. Wie kann ich mehrere Hostnamen (z. B. jira.example.com, confluence.example.com) an meinen one nginx-Container anhängen? – blacklabelops

+0

@maybeg Version2 bedeutet, dass alle Container sich sehen: Jira sieht Nginx und Konfluenz. Versuchen Sie und 'docker exec bash', und sehen Sie, wenn Sie die anderen zwei Behälter anpingen können. – VonC

+0

Ich muss über Nginx routing, weil jede Instanz die andere Instanz durch seine https-Protokoll adressiert. Der Application Link wird von atlassian products verwendet, um Links innerhalb des ui zu generieren. Der http-Link wird zwischen den Instanzen funktionieren und ja, sie werden pingen und sich gegenseitig sehen, aber der generierte http-Link innerhalb des ui funktioniert nicht innerhalb des Browsers. – blacklabelops

Verwandte Themen