2017-06-29 2 views
4

Mit v2 von Docker-compose Synthax, waren wir in der Lage, so etwas zu tun:Docker-compose v3: teilen binden montierte Volumen zwischen mehreren Behältern mit Top-Level-Volumen Syntax

version: '2' 
services: 
    app: 
    image: tianon/true 
    volumes: 
     - ../app:/var/www/app 
    nginx: 
    image: nginx 
    volumes_from: 
     - app 
    php: 
    image: php 
    volumes_from: 
     - app 

In v3.2 volumes_from ist jetzt invalid option. Die Dokumentation ist alles für die Verwendung neuer Top-Level-Volumes synthax, die all the ways better ist. Ich habe einige Kommentare auf Github zu lesen, und die einzige Lösung, die Menschen vorschlagen, ist

version: '3.2' 
services: 
    nginx: 
    image: nginx 
    volumes: 
     - app:/var/www/app 
    php: 
    image: php 
    volumes: 
     - app:/var/www/app 
volumes: 
    app: 
    driver_opts: 
     type: none 
     device: ../app 
     o: bind 

die offensichtlich schlechter aussieht, und es funktioniert auch nicht für mich. Es gibt mir einen Fehler: no such file or directory. Also, was soll ich noch versuchen? Es scheint, als ob ich immer noch links anstelle von Top-Level-Volumes verwenden kann, aber es wird als Legacy-Option in der Dokumentation angesehen. Wie geht es richtig mit neuer Syntax?

EDIT: Frage wurde als mögliche Duplikat identifiziert, aber ich stimme nicht zu. Siehe meinen Kommentar unten für Erklärung.

+0

Mögliches Duplikat [Wie Volumes ersetzen \ _From in Docker-Komponisten v3] (https: //stackoverflow.com/questions/42244079/how-to-replace-volumes-from-in-docker-composer-v3) – panK

+1

@panK Ich fragte nach nativen Docker Weg, um die Sache zu tun, die ich mit v2 erreichen konnte Synthax. Wenn ein Drittanbieter-Plugin den gleichen Effekt erzielen soll, dann ist die Antwort wahrscheinlich: Es ist nicht möglich. Aber ich bin mir nicht sicher, dass es tatsächlich der Fall ist, denn von dem, was ich auf Github Repo sehen kann, wird das vorgeschlagene Plugin nicht aktiv gepflegt und ist nicht sehr beliebt. Zur gleichen Zeit ist es ziemlich üblich Anwendungsfall. Ich gehe also davon aus, dass der Autor dieser Frage nach einer möglichen Option gesucht hat, und ich suche nach einem nativen, "offiziellen" Docker-Weg. – m0onspell

+0

Ich markierte es als ein mögliches Duplikat, weil ich viele Post 'volumes_from' an diesem Tag durchging und ich glaube, dass jeder nach einer nativen, offiziellen und zuverlässigen Lösung sucht. Ich konnte keine offizielle finden, weil es so aussieht, als hätten sie diese Idee einfach aufgegeben. Dies ist der einzige Grund, warum ich bei der v2-Syntax geblieben bin. – panK

Antwort

0

Da das Thema Starter bereits erwähnt, Schlüssel volumesvolumes_from wurde von der neuen docker-compose Syntax entfernt, nach den documentation zugunsten der genannten Volumina in der obersten Ebene definiert. In der Dokumentation wird auch die Differenz zwischen volumes und , von denen, die den Inhalt verwaltet:

By contrast, when you use a volume, a new directory is created within Docker’s storage directory on the host machine, and Docker manages that directory’s contents.

Wenn dies der Fall ist, dann ist es nicht sinnvoll, einen Host-Ordner in einem Volumen zu binden machen montieren und lassen Es wird vom Dateisystem des Hosts und von Docker gleichzeitig gesteuert.

Wenn Sie immer noch die gleichen Ordner, in zwei oder mehr Behälter binden befestigen mögen versuchen, Sie könnten so etwas wie:

version: '3.2' 
services: 
    nginx: 
    image: nginx 
    volumes: 
     - type: bind 
     source: ../app 
     target: /var/www/app 
    php: 
    image: php 
    volumes: 
     - type: bind 
     source: ../app 
     target: /var/www/app 
+1

Die Frage enthält das Wort "teilen", nicht wiederholen. Teilen war in älteren Versionen möglich. Wiederholung ist immer eine schlechte Übung. – m0onspell

+0

Für Programmiersprachen Wiederholung ist eine schlechte Übung, ich stimme zu. Dies ist eine Konfigurationsdatei, deren explizite Angabe helfen kann, Unklarheiten zu beseitigen. Übrigens, wenn Sie meine Lösung mit der Docker-Inspect-Syntax mit der 2.0-Syntax verglichen hätten, hätten Sie gesehen, dass beide Versionen unter der Haube fast identisch sind, und Sie hätten gesehen, dass das gleiche Mount "geteilt" wird Behälter. –

Verwandte Themen