docker-Komponieren-volumes, die nicht mounten an host-Verzeichnisse
Ich bin mit docker-Komponieren für den Einsatz mit einem 2 docker-compose.yml
setup wo Baue ich das Bild lokal und ziehen von docker-hub auf dem server.
Neben dem Neubau von vs ziehen Sie ein Bild, das Bände config ist die gleiche.
Lokal:
app:
build: .
volumes:
- "/data/volume:/volume"
Und auf dem server:
app:
image: username/repo:tag
volumes:
- "/data/volume:/volume"
In meinem Dockerfile:
volume /volume
Lokal mein Laufwerk in das angegebene Verzeichnis zu fein, mit Dateien, erstellt von der app beibehalten der dort vor dem container. Auf dem deployment-server, jedoch bedeutet dies nicht passieren.
Dateien sind jedoch erzeugt und persistiert über setzt, obwohl mein deployment script läuft docker-compose down -v
die vermutlich entfernt, die namens & anonyme volumes auf dem container.
Ich bin mir sicher, dass ich was falsch mache, aber ich kann nicht sehen, was. Könnte es ein Problem mit dem Zwischenspeichern? Die volume-Konfiguration wurde nicht gleich auf der ersten bereitstellen.
Mehr Info:
Kann ich eigentlich nicht scheinen, um Kraft die Bilder verloren, zwischen nutzt. Ich ran:
docker-compose down -v --rmi all --remove-orphans
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
docker volume rm $(docker volume ls -q)
... ich dachte, das würde lassen Sie mich mit einem sauberen Schiefer für die Versetzung, dann:
docker pull username/repo:tag
docker-compose build --no-cache --force-rm
docker-compose up -d
... und die Dateien, die eigentlich in den bereitgestellten Volumes sind noch da, und es ist immer noch nichts in der montiert dir auf der Festplatte. Irgendwelche Ideen?
Noch mehr info
Läuft docker inspect <container>
auf dem server ergibt sich eine mount-Konfiguration wie diese:
"Mounts": [
"Source": "/data/volume",
"Destination": "/volume",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
]
Ich merke, es ist kein Treiber angegeben, und nicht sicher über die Bedeutung des "rprivate", aber Quelle und Ziel scheinen nicht korrekt zu sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem war, ich hätte montiert, die ein EBS-volume
/volume
nach der Docker-Dienst gestartet worden war.Verzeichnis montiert war, in den container, der ist, warum die
docker inspect
korrekt aussieht, aber es montiert, die bereits vorhandenen mount-Punkt, das wurde überlagert von dem host-eigenen mount.Diesem Berg passiert ist, nachdem die Docker-Dienst gestartet wurde, aber lange vor jedem Container wurden tatsächlich in Betrieb genommen, so hat es mir nicht vorkommen, dass Docker vielleicht nicht respektieren, das Dateisystem zu ändern, die hatte früher passiert ist.
War die Lösung, einfach neu starten, der Docker-Dienst.
Möchte nur hinzufügen, dass, wenn Sie die Entwicklung auf Windows, Sie soll ausdrücklich ermöglichen, Docker, um den Zugriff auf Ihr Laufwerk C:. Bis Sie das tun, werden alle zugeordneten volumes erscheinen als leere.
Wenn laufen über Hyper-V (Docker für Windows):
Wenn laufen über VirtualBox:
VBoxManage sharedfolder add default --name c --hostpath /c --automount
(Quelle)Schlage ich vor, auf dem server überprüfen Sie die Berechtigungen auf /data/Lautstärke ändern auf 777 temporär zu testen, ob dies das Problem ist. Auch user-server ist nur eine Linux-Maschine? Oder ist eine virtualisierte Umgebung erstellt mit docker-Maschine oder etwas ähnliches.
Die volumes, die Sie verwenden, sind nicht anonym oder benannt, aber host montiert. Es ist kein Befehl, in der Hafenarbeiter, die löschen eines host bereitgestellte volume.
Außerdem schlage ich zu tun, die gleiche Prozedur mit
docker run
stattdocker-compose
zu verwerfen, die ein problem mit docker-verfassenHinsichtlich
/data/volume
Verzeichnis, welches ich angegeben, als Quelle für das mount. Daher gehe ich davon aus, dass der mount-Konfiguration nicht, und die Dateien werden eigentlich in einem anonymen Andockfenster Volumen, oder so... Die Berechtigungen auf das mount-Verzeichnis sind 777 schon, sollte erwähnt haben, dass.Neustart des andockfensters löste das Montage-problem für mich auch, Danke!
Um neu zu starten Sie das Andockfenster verwenden Sie den folgenden Befehl ein:
service docker restart
.Sollte es ein paar Sekunden dauern, und Andockfenster werden sollte, wieder auf.
Wenn Sie sicherstellen möchten, dass es bereit ist, die Sie ausführen können:
service docker status
.