Sfondo
Docker Volume ci permette di montare dinamicamente alcuni file (come file di configurazione) per sovrascrivere i file originali nell'immagine quando si avvia un container Docker, ma cosa succede se montiamo una cartella o un file che non esiste ancora sull'host nel container? LZ incontrò un problema simile nel suo lavoro, così lo praticò personalmente e registrò i risultati sperimentali come segue:
Montaggio cartelle
Il comportamento di Docker durante il montaggio delle cartelle è uniforme, come segue:
- Se la cartella non esiste, viene creata prima la cartella (o ricorsivamente se è una cartella multilivello)
- Sovrascrive il contenuto della cartella nel contenitore con il contenuto della cartella sull'host
I dettagli sono i seguenti:
La cartella sull'host esiste e non è vuota
ospite | contenitore | Risultato del montaggio | | Esiste la cartella non vuota A | Cartella B che non esiste | Crea prima la cartella B in Contanier, poi copia tutti i file della cartella A in B | | Esiste la cartella non vuota A | Esiste la cartella non vuota B | Prima svuota il contenuto originale della cartella cinese contenitore B, poi copia la copia cinese A in B |
Indipendentemente dall'esistenza o meno della cartella B nel contenitore, A sovrascriverà completamente il contenuto di B
La cartella sull'host esiste, ma è vuota
ospite | contenitore | Risultato del montaggio | | Cartella vuota A che esiste | Esiste la cartella non vuota B | Il contenuto della cartella cinese container B viene svuotato |
Il contenuto della cartella corrispondente nel contenitore viene svuotato
La cartella host non esiste
ospite | contenitore | Risultato del montaggio | | Cartella A che non esiste | Esiste la cartella non vuota B | Crea la cartella A sull'host, e il contenuto della cartella cinese del container B viene svuotato | | Cartelle A/B/C che non esistono | Esiste la cartella non vuota B | Creare cartelle A/B/C sull'host, e il contenuto della cartella cinese container B viene svuotato |
Il contenuto della cartella corrispondente nel contenitore viene svuotato
sommario
La cartella host sicuramente sovrascriverà la cartella cinese del container:
ospite | contenitore | Risultato del montaggio | | La cartella non esiste/esiste la cartella ma è vuota | La cartella non esiste/esiste ma è vuota/esiste e non è vuota | Contenitore del pezzo cinese è coperto (svuotato) | | La cartella esiste e non è vuota | La cartella non esiste/esiste ma è vuota/esiste e non è vuota | i contenuti delle cartelle cinesi contenitori vengono sovrascritti (il contenuto originale viene svuotato e il contenuto della cartella sull'host viene sovrascritto) |
Montatura del file
La differenza più grande tra montaggio di file e montaggio di cartelle è:
- Docker vieta di montare file che non esistono sull'host in file già presenti nel container
- Il montaggio dei file non ha alcun effetto sugli altri file nella stessa cartella
Inoltre, il suo comportamento di sovrascrittura è coerente con il montaggio delle cartelle, cioè:
- Sovrascrive il contenuto del file nel contenitore con il contenuto del file sull'host
I dettagli sono i seguenti:
ospite
ospite | contenitore | Risultato del montaggio | | File che non esistono configA.js | Documenti già esistenti congfigB.js | Errore, stai cercando di montare una directory su un file (o viceversa)? Controlla se il percorso host specificato esiste ed è il tipo atteso. Genera due directory vuote configA.js e configB.js sull'host contemporaneamente, ma il contenitore non può avviarsi |
ospite
ospite | contenitore | Risultato del montaggio | | Archivio attuale configA.js | Archivio attuale congfigB.js | contenitori configB.js gli elementi cinesi rimangono gli stessi, ma il contenuto del file viene sovrascritto dal contenuto congfigA.js | | Archivio attuale configA.js | File che non esistono congfigB.js | Un nuovo file configB.js nel contenitore con il contenuto del file configA.js rimane invariato configB.js tutti gli altri file sotto il file |
sommario
Il file sull'host sovrascriverà sempre la cartella cinese del container
ospite | contenitore | Risultato del montaggio | | File che non esistono | Documenti già esistenti | Atti proibiti | | Documenti esistenti | File che non esistono / file che già esistono | Aggiungi/sovrascrive (crea una directory se non esiste) |
conclusione
Montaggio cartelle
- Se permetti di montare cartelle inesistenti o vuote nel contenitore, le cartelle corrispondenti nel contenitore verranno svuotate
- Collegare una cartella non vuota a un contenitore sovrascriverà la cartella originale nel contenitore
Montatura del file
- È vietato montare file inesistenti su file già presenti nel contenitore
- I file esistenti verranno sovrascritti quando vengono collegati al contenitore e, se i file non esistono, verranno creati
Scenari applicabili
- Dall'analisi sopra, si può vedere che il montaggio delle cartelle viene usato per sovrascrivere i file dell'intera cartella, quindi può essere usato quando è necessario montare un gran numero di file nel container; inoltre, se viene montata una cartella vuota o inesistente, viene generalmente usato al contrario: cioè, dopo l'avvio del contenitore, alcuni file (come i log) possono essere generati sotto la cartella del punto di montaggio nel contenitore e, in questo momento, possono essere visti direttamente nella cartella sull'host corrispondente.
- Il montaggio dei file viene spesso utilizzato per montare file di configurazione e modificare dinamicamente la configurazione predefinita in tempo reale, poiché sovrascrive solo un singolo file senza influenzare gli altri file nella stessa cartella nel container.
Trasferito da:Il login del link ipertestuale è visibile.
(Fine) |