GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einzelnes Dateivolume, das als Verzeichnis in Docker eingebunden ist

test ist der Name Ihres Bildes, das Sie mit 'docker build -t test erstellt haben ', kein /test Ordner.

Versuchen Sie es mit Dockerfile mit:

CMD ["ls", "-lah", "/"]
or
CMD ["cat", "/file.json"]

Und:

docker run --rm -it -v $(pwd)/file.json:/file.json test

Beachten Sie die Verwendung von $(pwd) um eine Datei mit ihrem vollständigen absoluten Pfad einzuhängen (relative Pfade werden nicht unterstützt)

Durch die Verwendung von $(pwd) , erhalten Sie einen absoluten Pfad, der existiert, und respektieren die Groß-/Kleinschreibung, im Gegensatz zu einem Dateinamen oder Pfad, der möglicherweise nicht existiert.
Ein nicht vorhandener Host-Pfad würde als Ordner im Container gemountet.


Vielleicht ist das in den obigen Antworten klar ... aber ich habe einige Zeit gebraucht, um es in meinem Fall herauszufinden.

Der eigentliche Grund dafür, dass die mit -v geteilte Datei als Verzeichnis statt als Datei angezeigt wird, ist, dass Docker die Datei auf dem Host nicht finden konnte. Docker erstellt also ein neues Verzeichnis im Container, wobei der Name der Name der nicht vorhandenen Datei auf dem Host ist, da Docker denkt, dass der Benutzer nur ein Volume/Verzeichnis teilen möchte, das in Zukunft erstellt wird.

Wenn Sie also in dem oben gemeldeten Problem ein relatives Verzeichnis im Befehl -v verwendet haben und Docker relative Verzeichnisse nicht versteht, bedeutet dies, dass die Datei auf dem Host nicht gefunden wurde und Docker daher ein Verzeichnis erstellt hat. Und die obige Antwort, die vorschlägt, $(pwd) zu verwenden, ist die richtige Lösung, wenn das Problem auf ein relatives Verzeichnis zurückzuführen ist.

Aber für diejenigen, die diese Seite lesen, die kein relatives Verzeichnis verwenden und das gleiche Problem haben ... dann versuchen Sie zu verstehen, warum die Datei auf dem Host fehlt.

Es könnte nur ein dummer Tippfehler sein...

Es könnte sein, dass Sie den Befehl „docker run“ von einem Client aus ausführen, der den Docker-Container auf einem anderen Host erstellt, und die freigegebene Datei existiert nicht auf diesem anderen Host. Die Datei, die mit -v geteilt wird, muss auf dem Host vorhanden sein, auf dem der Docker-Agent den Container erstellt ... nicht unbedingt auf dem Client, auf dem der Befehl "docker run -v ..." ausgeführt wird (obwohl sie in identisch sein werden vielen Fällen).

Es gibt oben andere mögliche Erklärungen für Mac und Windows ... das könnte es auch sein.

Also ist die auf dem Host fehlende Datei das Problem... beheben Sie das Problem in Ihrem Setup... die Verwendung von $(pwd) könnte die Lösung sein, aber nicht immer.


Linux
  1. Unterschied bei der Berechnung der Verzeichnisgröße?

  2. Linux – Zweck des Verzeichnisses /net?

  3. Tar:Einzelne Datei in ein Verzeichnis extrahieren, ohne Unterordner zu erstellen?

  4. Swap-Volume hinzufügen?

  5. Docker-Volumes verstehen

Entfernen Sie einen symbolischen Link zu einem Verzeichnis

Holen Sie sich die neueste Datei in einem Verzeichnis unter Linux

Erkunden des Dateisystems des Docker-Containers

Docker auf Ubuntu ausführen:Das gemountete Host-Volume kann nicht vom Container aus beschrieben werden

Bash:Keine solche Datei oder Verzeichnis?

sys/types.h:Keine solche Datei oder Verzeichnis