2016-06-30 10 views
1

/Ich bin mit Docker Beta auf einem Mac einer hat einige Dienste in service-a/docker-compose.yml einzurichten:Zugang Host-Maschine dns von einem Docker Behälter

version: '2' 
services: 
    service-a: 
    # ... 
    ports: 
     - '4000:80' 

ich dann folgend in /etc/hosts eingerichtet:

::1 service-a.here 
127.0.0.1 service-a.here 

und ich habe einen nginx Server, der diese Proxies service-a.here zu localhost:4000 läuft. Also auf meinem Mac kann ich einfach laufen: curl http://service-a.here. Das alles funktioniert gut.

Nun, ich baue einen anderen Dienst, service-b/docker-compose.yml:

version: '2' 
services: 
    service-b: 
    # ... 
    ports: 
     - '4001:80' 
    environment: 
     SERVICE_A_URL: service-a.here 

service-b Bedürfnisse service-a für ein paar Dinge:

  1. es den Benutzer im Browser auf die $SERVICE_A_URL umleiten muss
  2. Er muss HTTP-Anforderungen an service-a ausführen, auch unter Verwendung der $SERVICE_A_URL

Mit diesem Setup funktioniert nur die Umleitung (1.). HTTP-Anfragen (2.) funktionieren nicht, weil der service-b Container keine Ahnung von service-a.here in seinem DNS hat.

Ich habe versucht, service-a.here mit der add_hosts Konfigurationsvariable hinzuzufügen, aber ich bin nicht wund, was es zu setzen. localhost wird natürlich nicht funktionieren.

Beachten Sie, dass ich die docker-compose-Dateien wirklich getrennt halten möchte (das Zusammenfügen würde mein Problem übrigens nicht beheben), weil beide bereits viele Dienste in ihnen ausgeführt haben.

Gibt es eine Möglichkeit, Zugriff auf die DNS-Auflösung auf localhost von innerhalb eines Docker-Container zu haben, so dass zum Beispiel curl service-a.here aus einem Container funktioniert?

Antwort

0

Sie können die Anweisung 'link' in Ihrer Datei docker-compose.yml verwenden, um die Adresse automatisch von Ihrem Container-Service aufzulösen-b.

service-b: 
    image: blabla 
    links: 
     - service-a:service-a 
service-a: 
    image: blablabla 

Sie werden nun eine Zeile in der Datei/etc/hosts von Ihnen Service-b sagen:

service-a 172.17.0.X 

Und beachten Sie, dass Service-a wird vor Service-b angelegt werden, während die App Komponieren . Ich bin mir nicht sicher, wie Sie danach eine spezielle IP angeben können, aber die Dokumentation von Docker ist ziemlich gut gemacht. Hoffe, das ist es, wonach du gesucht hast.

+0

Das funktioniert! Für eine 'docker-compose.yml' Datei. Nicht für mehrere 'docker-compose.yml's. – romeovs

+0

Ich denke, ich muss auf 'externe_links' zurückgreifen, dann: / – romeovs