Ich benutze Docker-Compose und V3. Ich versuche, ein Volume im Docker bereitzustellen:
./appdata:/appdata
Ich möchte dies als Volume haben und dann auf dieses Volume aus mehreren Containern verweisen. Die Volume-Konfigurationsreferenz zeigt nur data-volume:
als benanntes Volume ohne Wert, sieht also nicht wie oben aus.
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 sein, keine Zeichenfolge.
Natürlich weiß ich, dass ich das Schlüssel/Wert-Paar volumes
ändern muss, aber ich bin nicht sicher , wie ich dies ändern soll, damit ich es kann ein Volumen zwischen Diensten teilen.
Ich habe auch ausgecheckt volumes_from
Dies ermöglicht jedoch effektiv nur die Vererbung von anderen Containern. Ich habe jemanden gesehen, der volumes_from
in einem anderen Container, der die gewünschte Zuordnung enthält, aber mit command: true
so einstellen, dass der container nie wirklich läuft, was mir nur wie ein hack aussieht.
Wie kann ich das machen?
Beachten Sie, ich habe die folgende Arbeitsweise:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
Aber das ist nur eine Vervielfältigung und ich hoffe, ein genanntes Volume kann mir dabei helfen, das zu vermeiden :-)
Die benannten Volumes können auf folgende Weise für mehrere Container freigegeben werden:
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume: location_in_the_container
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume: location_in_the_container
volumes:
app-volume:
Hier ist eine Beispielkonfiguration, die ich zum besseren Verständnis verwende. Ich lege die aus meinem web
-Container generierten statischen Dateien einem benannten Volume mit dem Namen static-content
, das dann vom nginx
-Container gelesen und geliefert wird:
services:
nginx:
container_name: nginx
build: ./nginx/
volumes:
- static-content:/usr/src/app
web:
container_name: web
env_file: .env
volumes:
- static-content:/usr/src/app/public
environment:
- NODE_ENV=production
command: npm run package
volumes:
static-content:
Dies löst es, ohne benannte Volumes zu verwenden:
volumes:
- ./appdata:/appdata
So sieht es aus:
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- ./appdata:/appdata
php:
build: ./php/
expose:
- 9000
volumes:
- ./appdata:/appdata