Mit Docker Compose v1.6.0 + gibt es jetzt eine neue / Version 2-Dateisyntax für die docker-compose.yml
Datei. Die Änderungen enthalten einen separaten Schlüssel der obersten Ebene mit dem Namen volumes
. Auf diese Weise können Datenträgerdefinitionen an einem Ort "zentralisiert" werden.
Ich versuche, Volumes dort zu benennen und auf meinem lokalen Host-Datenträger einen einzelnen Volume-Verweis mit mehreren Pfaden zu haben. Das folgende Beispiel löst eine Ausnahme mit einem aus Traceback
, das mit endet
AttributeError: 'list' object has no attribute 'items'
Beispiel docker-compose.yml
:
version: '2'
services:
db:
image: postgres
volumes:
- database:/var/lib/postgres/data
php:
image: php-fpm:5.6
volumes:
- phpconf:/etc/php/conf.d
namedvolume:
container_name: namedvolume
build: ./Docker/Testvolume
volumes:
- ./Docker/Testvolume/shareme
volumes:
database:
- ./Docker/Postgres/db:ro
- ./Docker/Postgres/ini
phpconf:
- ./Docker/PHP-FPM/conf
singledir: ./Docker/foo
completemap: ./Docker/bar:/etc/service/conf.d
- namedvolume:/etc/service/conf.d # < this was a separate attempt w/o the other keys
… ?
Bisher habe ich alle Referenzinformationen zu Docker Compose docs master
-branch Volume sowie die Referenzinformationen zu Docker Compose docs Volume / Volume-Driver gelesen und anhand von GitHub-Beispielen die korrekte Syntax ermittelt, die erwartet wird. Es sieht so aus, als ob das noch niemand benutzt (GitHub) und die Dokumentation ist noch lange nicht vollständig (docker.com). Ich habe auch versucht, ein separates Volume als zu erstellen service
und darauf zu verweisen volumes
, aber das funktioniert nicht so gut. Irgendeine Idee, wie diese Syntax aussehen soll?
quelle
$(docker volume ls |awk '{print $2}')
können Sie verwenden.$(docker volume ls -q)
Dies ist nicht nur einfacher, es wird auch nicht "VOLUME" in der ersten Zeile gedruckt.volumes_from
besteht darin, die Liste der Volumes von einem anderen Container zu erben . Um ein benanntes Volume zu verwenden, verwenden Sie die Service-Level-Syntax- NAME:DEST
und legen den Pfad imvolumes
Schlüssel der obersten Ebene fest . In diesem Beispiel wird (zum Zeitpunkt des Schreibens) zusätzlich zu einem benannten Volume ein Standard- Volume erstellt, und das benannte Volume wird einfach nicht verwendet.So wie ich es verstehe, können Sie den globalen
volumes:
Abschnitt verwenden, umVolumes im globalen Bereich werden automatisch erstellt, sofern Sie dies nicht angeben
external: true
. Sie müssen weiterhin jedem Dienst in seinemvolumes:
Abschnitt mitteilen, wo dieser Datenträger bereitgestellt werden soll.Hier ist ein sehr einfaches Beispiel:
Der globale
volumes:
Eintrag fürproject
bewirkt, dass ein benanntes Volumeproject
erstellt wird. Es wird dann wie/bar
in Service eins und wie/foo
in Service zwei gemountet . Beide Dienste teilen die Daten des Datenträgers und können sie lesen / schreiben.Ich glaube nicht, dass das, was Sie versuchen, möglich ist (mehrere Pfade in ein einziges Volume und mit unterschiedlichen R / W-Flags verwandeln). Wenn dies möglich ist, suchen Sie wahrscheinlich nach einer Möglichkeit, ein benanntes Volume mit diesen Eigenschaften auf andere Weise zu erstellen, und fügen Sie es dann als externes Volume hinzu:
quelle
project
und dann darauf verweisenproject:/bar
, wo sind dieproject
Pfade tatsächlich definiert?project:
Alias bezieht ? Wie weiß Docker , wenn ich teilen möchte, sagen./some_folder/some_subfolder/yet_another_subfolder
zu derone:
undtwo:
Behälter?Schauen Sie sich beispielsweise Version 2 an, auch die Referenz zur Volume-Konfiguration :
Mein Beispiel: (Version 1)
quelle
Version 2
Abschnitt des Dokuments)volumes
Schlüssel der obersten Ebene umzugehen - was ich nicht getan habe, daher die Frage. Was ich nicht verstehe, ist das, was derdocker-compose.yml
Teil mit der Syntax von Version 1 mir erklären soll.Ich denke, was Sie versuchen, ist ungefähr das Gleiche wie hier . Kurz gesagt: Es ist derzeit nicht möglich, ein benanntes Volume zu erstellen, das auf einen Mount-Punkt auf dem Host verweist. Sie können ein benanntes Volume erstellen, um Daten zwischen Containern gemeinsam zu nutzen. Die Daten sind jedoch nur im Volume selbst vorhanden und verschwinden, wenn Sie das Volume löschen.
Das Mounten benannter Volumes wurde vorgeschlagen , wird aber in naher Zukunft leider nicht zum Core hinzugefügt. Es ist jedoch möglich, ein Docker-Plugin mit dem Namen local-persist zu verwenden .
quelle