2017-11-15 2 views
0

Ich habe zwei Dienste - einer ist App und der andere ist db. Diese ist eine Skizze eines Docker compose Datei:Docker komponieren: wie andere Dienst als localhost

version: "2" 
services: 
    company: 
    container_name: company-app 
    extends: 
     file: ../base-config.yml 
     service: company 
    links: 
     - company-db 
    env_file: ./company.env 
    extra_hosts: 
    - "local.company.com:127.0.0.1" 

    company-db: 
    container_name: company-db 
    hostname: localhost 
    extends: 
     file: ../base-config.yml 
     service: company-db 
    env_file: ../db.env 

Anwendungs ​​Dienst versucht, auf die Datenbank auf url

die in Communications link failure führt zu verbinden, wenn in Docker Behälter läuft.

ich angebracht habe app Container laufen und prüfen etc/hosts Datei und finden neben Inhalt:

[email protected]:/# cat etc/hosts 
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
127.0.0.1 local.company.com 
172.18.0.3 d1a4391a83f4 

Wie ich verstehe der letzte Eintrag von Docker compose hinzugefügt ist die ip von dem i db Container verweisen kann, auch Ich finde heraus, dass es von Domain referenziert werden könnte.

Auch wie Sie sehen, habe ich versucht, Host-Option zum Dienst Company-DB hinzufügen, ohne Erfolg.

Meine Frage ist, kann ich irgendwie ändern, nur komponieren Konfiguration erreichen Fähigkeit company-db Service über die gleiche localhost URL verweisen?

Antwort

0

Sie können dies erreichen, indem Sie Ihre Localhost-Ports mit Containern verknüpfen. Für Ihr Unternehmen-db-Service schreiben die folgende

ports: 
    - 3306:3306 
+0

Ich bin mir nicht sicher, wie dies Mapping in diesem Fall helfen kann. Können Sie bitte etwas mehr ausarbeiten? – marknorkin

0

Jeder Behälter selbst als localhost sieht. Docker verwendet ein internes DNS. So können Sie Ihre DB-Container wie folgen nennen:

jdbc: mysql: // unternehmen db/company_db

Und die Hostnamen Ihrer DB entfernen.

+0

die Frage ist ausschließlich über die Möglichkeit, das über die Konfiguration oder andere Docker-Konfiguration zu tun, aber nicht über das Ändern der App-Konfiguration – marknorkin

+1

Ihre DB ist nicht auf dem gleichen Server als Ihre App. Sie müssen also die Konfiguration Ihrer App ändern. Wenn Sie einen Remote-Container aufrufen und ihn "localhost" nennen möchten, machen Sie einen Fehler. –