
Betrachten Sie den folgenden YAML-Code in meiner docker-compose.yml
Datei, der die Volume-Montage einrichtet (mit Version 3.7), mitKurzformsyntaxwie in den Dokumenten angegeben:
volumes:
- ./logging:/var/log/cron
Dadurch wird der relative Pfad logging
auf meinem Hostcomputer dem /var/log/cron
Ordner im Container zugeordnet. Wenn ich ausführe docker-compose up
und der logging
Ordner auf meinem Hostcomputer nicht vorhanden ist, erstellt Docker ihn. Alles gut.
Wenn ich das oben Gesagte nun ändere zuLangform-Syntax:
volumes:
- type: bind
source: ./logging
target: /var/log/cron
Wenn ich jetzt ausführe docker-compose up
, wird KEIN logging
Ordner erstellt, wenn er auf meinem Host-Rechner nicht existiert. Ich bekomme
Cannot create container for service app: b'Mount denied:\nThe source path "C:/Users/riptusk331/logging"\ndoesn\'t exist and is not known to Docker'
Weiß jemand, warum die Syntax der Kurzform den Hostpfad erstellt, wenn er nicht existiert, die Langform dies jedoch nicht tut und einen Fehler ausgibt?
Verwenden von Docker Desktop für Windows.
Antwort1
Dies war eigentlich ein „Feature“ (Fehler) der alten -v
Syntax, das nicht behoben werden wollte, da dadurch Tausende (Millionen?) von Implementierungen, die auf diesem Verhalten basierten, beschädigt worden wären.
Die neuere --mount
Volume-Syntax, die für Docker Swarm eingeführt und dann erweitert wurde, um mit den ursprünglichen Docker-CLI-Aufrufen kompatibel zu sein, führte diese Funktionalität ausdrücklich nicht wieder ein, da es sich um „unerwartete Magie“ handelte, die nicht wirklich dokumentiert ist und auf die man sich nicht hätte verlassen sollen.