Warum erstellt Docker-Compose das Quellverzeichnis in einer Syntax, aber nicht in einer anderen?

Warum erstellt Docker-Compose das Quellverzeichnis in einer Syntax, aber nicht in einer anderen?

Betrachten Sie den folgenden YAML-Code in meiner docker-compose.ymlDatei, der die Volume-Montage einrichtet (mit Version 3.7), mitKurzformsyntaxwie in den Dokumenten angegeben:

volumes:
    - ./logging:/var/log/cron

Dadurch wird der relative Pfad loggingauf meinem Hostcomputer dem /var/log/cronOrdner im Container zugeordnet. Wenn ich ausführe docker-compose upund der loggingOrdner 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 loggingOrdner 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 -vSyntax, das nicht behoben werden wollte, da dadurch Tausende (Millionen?) von Implementierungen, die auf diesem Verhalten basierten, beschädigt worden wären.

Die neuere --mountVolume-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.

verwandte Informationen