Ich benutze Docker-Compose und v3. Ich versuche, ein Volume in Docker bereitzustellen:
./appdata:/appdata
Ich möchte dies als Volume haben und dann auf dieses Volume aus mehreren Containern verweisen. Die Volume-Konfigurationsreferenz wird nur data-volume:
als benanntes Volume ohne Wert angezeigt, sodass sie nicht wie oben beschrieben aussieht.
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume
volumes:
app-volume: ./appdata:/appdata
Das gibt mir:
FEHLER: In der Datei './docker-compose.yml' muss das Volume 'app-volume' eine Zuordnung und keine Zeichenfolge sein.
Natürlich weiß ich, dass ich das volumes
Schlüssel / Wert-Paar ändern muss, aber ich bin mir nicht sicher, wie ich das ändern soll, damit ich ein Volume zwischen den Diensten teilen kann.
Ich habe auch ausgecheckt, volumes_from
aber dies ermöglicht effektiv nur die Vererbung von anderen Containern. Ich habe jemanden gesehen, der einen volumes_from
anderen Container verwendet, der das gewünschte Mapping enthält, aber mit command: true
set, damit der Container nie ausgeführt wird, was mir nur wie ein Hack erscheint.
Wie kann ich das machen?
Beachten Sie , ich tun haben folgende Arbeiten:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
Aber das ist nur eine Vervielfältigung und ich hoffe, dass ein benannter Band mir helfen könnte, dies zu vermeiden :-)
quelle
Antworten:
Die genannten Volumes können auf folgende Weise für mehrere Container freigegeben werden:
Hier ist eine Beispielkonfiguration, die ich zum besseren Verständnis verwende. Ich mache die statischen Dateien, die aus meinem
web
Container generiert wurden , einem benannten Volume zugänglich,static-content
das dann gelesen und vomnginx
Container bereitgestellt wird:quelle
static_content
im Host-Dateisystem fest?app-volume: location_in_the_container
ist falsch./usr/src/app
imnginx
Container und/usr/src/app/public
imweb
Container beide Originalinhalte haben, welcher wird verwendet und warum?collectstatic
in einem Container aus und möchten, dass die Ergebnisse in einem anderen verfügbar sind, aber Sie interessieren sich nicht für den Host-OrdnerDies löst es ohne Verwendung benannter Volumes:
Es sieht also so aus:
quelle
./appdata
, das versuche ich zu tun. Lassen Sie diese Antwort hier jedoch :) +1Die Docker-benannten Volumes wurden ab Version Docker-Compose 3 entfernt.
Sie können jedoch Erweiterungsfelder verwenden , um das Duplizieren der Volume-Quelle zu vermeiden und sich vor zukünftigen Tippfehlern zu schützen:
HINWEIS: Diese Funktion ist ab dem Dateiformat Version 3.4 verfügbar.
quelle
volumes
Feld, scheinen in Version 3 vondocker-compose
immer noch eine Sache zu sein .