Il volume Docker e i montaggi di binding vengono utilizzati per associare le directory sul sistema operativo host alle posizioni nel file system del contenitore. Sebbene siano comunemente usati per montare intere directory, puoi anche usarli per collegare simbolicamente singoli file.
Collegamento simbolico a Docker dall'host
Il montaggio di intere directory funziona bene se stai sovrascrivendo un intero elenco di file di configurazione, ma se vuoi solo sceglierne uno di destinazione, dovrai utilizzare un montaggio a file singolo. Questo è utile anche se vuoi avere più mount nella stessa directory, ma da posizioni diverse. Funziona in modo molto simile a un normale collegamento simbolico Linux, tranne per il fatto che viene gestito tramite Docker e attraversa il ponte tra il file system host e container.
I normali montaggi del volume Docker richiedono il montaggio su una directory di destinazione , all'interno del quale verrà collegato il volume.
docker volume create nginx-config docker run -d --name devtest --mount source=nginx-config,target=/etc/nginx nginx:latest
Tuttavia, con i montaggi bind, l'origine può essere una directory o un file sull'ospite. I montaggi di volume non lo supportano e, sebbene tu voglia usarli di solito, devi usare i montaggi di collegamento di livello inferiore se vuoi montare file singoli.
Per fare ciò, puoi eseguire il contenitore con il flag --mount type=bind
, che supportano i singoli file se specifichi il percorso:
docker run -it --mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg nginx sh
In alternativa, se desideri davvero utilizzare i volumi Docker, puoi creare un volume con solo il file che intendi montare, montarlo in una directory temporanea nel contenitore e quindi creare un collegamento simbolico effettivo all'interno del contenitore (nello script di compilazione Docker ) che si collegherebbe alla directory temporanea con il file. Questa è probabilmente una soluzione peggiore di un montaggio di collegamento in generale, ma ti consente di archiviare i dati tramite l'API del volume Docker.