2015-12-17 8 views
7

Ich versuche, einen SonarQube-Container einzurichten, der von einem MySQL-Datenbankcontainer unterstützt wird. Meine Docker-compose.yml:docker-compose - Expose verknüpfter Service-Port

sonar: 
    environment: 
    - SONARQUBE_USER=sonar 
    - SONARQUBE_PASSWORD=sonar 
    - SONARQUBE_DATABASE=sonar 
    - SONARQUBE_JDBC_URL=jdbc:mysql://db:3306/sonar?useUnicode=true&characterEncoding=utf8 
    build: . 
    ports: 
    - "19000:9000" 
    - "19306:3306" 
    links: 
    - db 
db: 
    environment: 
    - MYSQL_ROOT_PASSWORD=root-secret 
    - MYSQL_USER=sonar 
    - MYSQL_PASSWORD=sonar 
    - MYSQL_DATABASE=sonar 
    image: mysql 

Im ports Abschnitt Ich versuche, sowohl Port zu belichten 9000 von Sonarqube (Web-Interface) und Port 3306 (MySQL-Verbindung).

Gibt es eine Möglichkeit, einen Anschluss von einem verbundenen Dienst (wie db in diesem Fall) aus dem "Haupt" Container, z. sonar?

EDIT: Nur um meine Bedürfnisse besser zu erklären, möchte ich beide Ports zu meinem localhost offen legen. Ich brauche Zugriff auf beide Ports von meinem Rechner aus, da ich SonarQube Runner Zugriff auf die Datenbank benötige und auch einige Abfragen in der Datenbank ausführen möchte, von meinem Rechner, nicht in einem anderen Container.

+0

Ich verstehe jetzt. Aber warum nicht einfach den 'db'' EXPOSE''d Port auf den Host mappen, wie Sie es für Sonar getan haben? Sonar wird immer noch den 'EXPOSE'' db'-Port verwenden, aber Ihre Abfrage von localhost wird den Port-Wert verwenden, den Sie im 'db/ports'-Bereich angegeben haben (siehe meine bearbeitete Antwort unten) – VonC

Antwort

6

Sie müssen nicht: ein EXPOSE Port von einem Dienst ist direkt von einem anderen sichtbar (Verknüpfung mit dem ersten).

Kein Port-Mapping erforderlich (wie bei 9000 von SonarQube und 3306)
Port-Mapping ist für den Zugriff auf einen Container vom Host erforderlich.
Aber von Container zu a (linked) container (beide von der gleichen Docker-Dämon verwaltet), ist jeder Port direkt in EXPOSE in its Dockerfile deklariert.

Ich möchte beide Ports zu meinem localhost verfügbar machen. Ich brauche den Zugang zu den beiden Häfen von meiner Maschine, wie ich Sonarqube Läufer Zugriff auf die Datenbank benötigt

Na, dann ... der db Abschnitt einen eigenen Port-Mapping-Abschnitt haben sollte:

db: 
    ports: 
    - "xxx:yyyy" 
+0

Aus irgendeinem Grund habe ich es versucht das und ich habe nicht gearbeitet. Ich denke, der Rest meiner Konfiguration war ziemlich falsch, aber jetzt funktioniert wie ein Zauber. Tks – resilva87

+0

Ist das wahr, wenn Docker in einem virtualenv ausgeführt wird? Ich kann das nicht zur Arbeit bringen –

Verwandte Themen