2017-05-23 6 views
0

Ich versuche, Docker als Teil meiner Testsuite zu verwenden. Ich habe 2 Container aufgebaut wie:Docker-Container, der eine Datenbank aus einem anderen Container einbaut

version: "3" 
services: 

    mongo_3_4: 
    image: mongo:3.4 
    command: ["mongod", "--smallfiles"] 
    ports: 
     - "27021:27017" 

    frontend: 
    build: 
     context: ./Dockerfiles/path/ 
     dockerfile: Dockerfile 
    ports: 
     - "63175:63175" 

Die frontend hat die Fähigkeit, eine MongoDB zu montieren, wo ich ihm Anmeldeinformationen von Host und Port geben, zum Beispiel vor Ort würde ich localhost | 27021 verwenden und meine db montiert werden würde .

Der einzige Weg, wie ich es zur Zeit arbeiten kann, ist, indem Sie die IP des Host-Computers. I erreicht dies, indem wie beschrieben here tun: $ ipconfig getifaddr en0

damit die Host-Maschine IP bekommen und dessen Verwendung für die Montage meine db vom Frontend dh 192.168.1.42 | 27021

Das Problem ich habe, ist diese Host-IP wird auf verschiedenen Umgebungen unterschiedlich sein wie es als Teil einer Testsuite verwendet wird. Es würde auf verschiedenen lokalen Maschinen mit verschiedenen Betriebssystemen verwendet werden und Travis-ci sagen.

Gibt es eine empfohlene Möglichkeit, diese Host-IP von Docker aus hart zu programmieren oder müsste ich ein Skript erstellen, das den Host ausarbeitet und dies tut sudo ifconfig lo0 alias 192.168.46.49?

Scheint einfach zu kompliziert, wenn alles, was ich tue, ist 2 Container zu haben und wollen, dass einer von ihnen in der Lage ist, die db von der anderen zu mounten?

+0

Dies ist einfach [Docker Networking] (https://docs.docker.com/engine/userguide/networking/). Werfen Sie einen Blick auf [diese Antwort] (https://stackoverflow.com/a/34728404/174843) für eine Zusammenfassung. –

Antwort

1

Der Host, auf dem Andockfenster ausgeführt wird, ist standardmäßig: 172.17.0.1. Hast du das probiert? (Das ist der localhost des Computers, grob gesagt)

Sie können aber auch Container verknüpfen und Vorteile von Docker Vernetzung erhalten:

version: "3" 
services: 

    mongo_3_4: 
    image: mongo:3.4 
    command: ["mongod", "--smallfiles"] 
    ports: 
     - "27021:27017" 

    frontend: 
    build: 
     context: ./Dockerfiles/path/ 
     dockerfile: Dockerfile 
    ports: 
     - "63175:63175" 
    links: 
     - mongo_3_4:mongo 

Dann können Sie von frontend zugreifen, da dies Mongo: mongo:27017

+0

danke das funktionierte wie ein Charme, wenn Sie die "Links" -Option verwenden. Immer noch nicht in der Lage, 'localhost' zu verwenden, aber ich bin mehr als glücklich mit der Fähigkeit' mongo: 27017' zu haben, eine kurze Frage, aber wie kommt es, dass es nicht den Port '27021' benutzt? – cmdv

+0

mongo hören 27017 auf der internen Container eigenen IP-Adresse (vielleicht 172.17.0.X), so 'mongo' Auflösung zu dieser IP von der' Frontend', dank der 'link'. Der Port 27021 steht dem ** Host ** (Ihren Schnittstellen, d. H. Ihrem localhost) zur Verfügung, und er ist in der IP des internen Containers nicht verfügbar. Macht das Sinn? – Robert

+0

So können Sie 'ports' aus dem mongo_3_4-Dienst herausnehmen. Frontend wird immer noch Zugang zu Mongo – Robert

Verwandte Themen