2017-02-20 2 views
0

Ich benutze Docker Version 1.13.1, bauen 092cba3 auf Windows 10.ein Datenvolumen zwischen zwei Docker-Container Teile

ich einen benutzerdefinierten Jenkins Container haben, die Code von Github in einem Volumen aufbaut.

Das Volumen ist /var/jenkins_home/workspace/myjob.

Ich habe auch einen Apache-Container, mit dem ich den Datenträger teilen möchte.

Die docker-compose.yml Datei ist:

version: '2' 

services: 

    jenkins: 
    container_name: jenkins 
    image: jenkins:v1 
    environment: 
     JAVA_OPTS: "-Djava.awt.headless=true" 
     JAVA_OPTS: "-Djenkins.install.runSetupWizard=false" # Start jenkins unlocked 
    ports: 
    # - "50000:50000" # jenkins nodes 
     - "8686:8080" # jenkins UI 
    volumes: 
     - myjob_volume:/var/jenkins_home/workspace/myjob 

    apache: 
    container_name: httpd 
    image: httpd:2.2 
    volumes_from: 
     - jenkins 

volumes: 
    myjob_volume: 

ich im Grunde der Jenkins Container wollen Sie den Code in einem Volumen holen, die dann von der Apache (httpd) Behältern sichtbar. Jede Änderung, die ich an meinem IDE-Code an Github mache, wird im Apache-Container sichtbar sein. Das Volume wird im Apache-Container erstellt, aber wenn ich den Code im Jenkins-Container erfolgreich erstellt habe, wird er nicht im Volume in Apache angezeigt.

EDIT: Nach dem Start der 2 Behälter mit docker-compose up -d,

  • aktiviere ich ihre Volumina von Kitematic
  • ich die Lautstärke Pfad für Apache ändern
  • zum Jenkins Volumen-zu-Punkt
  • und wenn Ich baue den Code von Jenkins, Apache sieht es so, wie ich es möchte.

Also ... wie soll ich das gleiche aus der Datei docker-compose machen?

Antwort

1

Sie verwenden volumes_from, die die Mount-Definition aus dem angegebenen Container "kopiert". Als Ergebnis wird die myjob_volume innerhalb des Apache-Containers bei /var/jenkins_home/workspace/myjob montiert werden. Das offizielle Apache-Image vom Docker-Hub (https://hub.docker.com/_/httpd/) verwendet /usr/local/apache2/htdocs/ als Webroot.

Um das Volume an dieser Position bereitzustellen, aktualisieren Sie die docker-compose-Datei so, dass sie so aussieht;

version: '2' 

services: 

    jenkins: 
    container_name: jenkins 
    image: jenkins:v1 
    environment: 
     JAVA_OPTS: "-Djava.awt.headless=true" 
     JAVA_OPTS: "-Djenkins.install.runSetupWizard=false" # Start jenkins unlocked 
    ports: 
    # - "50000:50000" # jenkins nodes 
     - "8686:8080" # jenkins UI 
    volumes: 
     - myjob_volume:/var/jenkins_home/workspace/myjob 

    apache: 
    container_name: httpd 
    image: httpd:2.2 
    volumes: 
     - myjob_volume:/usr/local/apache2/htdocs/ 

volumes: 
    myjob_volume: 
+0

hat es sein muss '/ usr/local/apache2/htdocs /'? Könnte nicht einfach etwas wie "/ var/test" sein und dasselbe sein? –

+0

Sicher, das sollte möglich sein, aber Sie müssen eine benutzerdefinierte Konfigurationsdatei für Apache – thaJeztah

+0

bereitstellen Das Beispiel in dieser Antwort ist im Grunde das gleiche wie das Zwei-Service-Setup 'Daten-Volumen' Beispiel in der [offiziellen Dokumentation] (https://docs.docker.com/compose/compose-file/#volume-configuration-reference). – hlovdal

Verwandte Themen