GNU/Linux >> Linux Esercitazione >  >> Linux

Volume di file singolo montato come directory in Docker

test è il nome della tua immagine che hai costruito con 'docker build -t test ', non un /test cartella.

Prova un Dockerfile con:

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

E:

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

Nota l'uso di $(pwd) per montare un file con il suo percorso assoluto completo (i percorsi relativi non sono supportati)

Usando $(pwd) , otterrai un percorso assoluto che esiste e rispetterà il caso, al contrario di un nome file o percorso che potrebbe non esistere.
Un percorso host inesistente verrebbe montato come cartella nel contenitore.


Forse è chiaro nelle risposte sopra ... ma mi ci è voluto del tempo per capirlo nel mio caso.

Il motivo sottostante per cui il file condiviso con -v viene visualizzato come una directory anziché come un file è che Docker non è riuscito a trovare il file sull'host. Quindi Docker crea una nuova directory nel contenitore con il nome che è il nome del file non esistente sull'host poiché docker pensa che l'utente voglia solo condividere un volume/directory che verrà creato in futuro.

Quindi nel problema sopra riportato, se hai utilizzato una directory relativa nel comando -v e docker non comprende le directory relative, significa che il file non è stato trovato sull'host e quindi docker ha creato una directory. E la risposta sopra che suggerisce di utilizzare $(pwd) sarà la soluzione corretta quando il problema è dovuto a una directory relativa.

Ma per coloro che leggono questa pagina che non utilizzano una directory relativa e hanno lo stesso problema... allora prova a capire perché il file manca sull'host.

Potrebbe essere solo uno stupido errore di battitura...

Potrebbe essere che tu stia eseguendo il comando "docker run" da un client che genera il contenitore docker su un host diverso e il file condiviso non esiste su quell'host diverso. Il file condiviso con -v deve esistere sull'host in cui l'agente docker genererà il contenitore... non necessariamente sul client in cui viene eseguito il comando "docker run -v ..." (anche se saranno gli stessi in molti casi).

Ci sono altre possibili spiegazioni sopra per Mac e Windows... anche questo potrebbe essere.

Quindi il file mancante dall'host è il problema... risolvi il problema nella tua configurazione... usare $(pwd) potrebbe essere la soluzione ma non sempre.


Linux
  1. Differenza nel calcolo della dimensione della directory?

  2. Aggiunta del volume di scambio?

  3. Comprensione dei volumi Docker

  4. Come montare o collegare simbolicamente un singolo file in un contenitore Docker

  5. Cheat sheet per le autorizzazioni di file/directory Linux

Gestore di file Java

Linux – Scopo della directory /net?

Tar:estrarre un singolo file in una directory senza creare sottocartelle?

Esecuzione della finestra mobile su Ubuntu:il volume host montato non è scrivibile dal contenitore

Bash:Nessun file o directory di questo tipo?

sys/types.h:file o directory non presenti