Fundo
O Docker Volume nos permite montar dinamicamente alguns arquivos (como arquivos de configuração) para sobrescrever os arquivos originais na imagem ao iniciar um contêiner Docker, mas o que acontece se montarmos uma pasta ou arquivo que ainda não existe no host no contêiner? LZ encontrou esse tipo de problema em seu trabalho, então ele mesmo praticou e registrou os resultados experimentais da seguinte forma:
Montagem de pastas
O comportamento do Docker na montagem da pasta é uniforme, conforme segue:
- Se a pasta não existir, ela é criada primeiro (ou recursivamente, se for uma pasta multinível)
- Sobrescreva o conteúdo da pasta no container com o conteúdo da pasta no host
Os detalhes são os seguintes:
A pasta no host existe e não está vazia
anfitrião | recipiente | Resultado da montagem | | A pasta não vazia A existe | Pasta B que não existe | Crie a pasta B no contanier primeiro e depois copie todos os arquivos da pasta A para o B | | A pasta não vazia A existe | A pasta B não vazia existe | Primeiro, esvazie o conteúdo original da pasta chinesa B do contêiner, e depois copie a cópia chinesa A para B |
Independentemente de a pasta B existir ou não, A vai sobrescrever completamente o conteúdo de B
A pasta no host existe, mas está vazia
anfitrião | recipiente | Resultado da montagem | | Pasta vazia A que existe | A pasta B não vazia existe | O conteúdo da pasta chinesa B do contêiner é esvaziado |
O conteúdo da pasta correspondente no contêiner é esvaziado
A pasta host não existe
anfitrião | recipiente | Resultado da montagem | | Pasta A que não existe | A pasta B não vazia existe | Crie a pasta A no host, e o conteúdo da pasta chinesa do contêiner B será esvaziado | | Pastas A/B/C que não existem | A pasta B não vazia existe | Crie as pastas A/B/C no host, e o conteúdo da pasta chinesa B do contêiner é esvaziado |
O conteúdo da pasta correspondente no contêiner é esvaziado
resumo
A pasta host definitivamente vai sobrescrever a pasta chinesa do container:
anfitrião | recipiente | Resultado da montagem | | A pasta não existe/a pasta existe, mas está vazia | A pasta não existe/existe, mas está vazia/existe e não está vazia | Peça chinesa do recipiente é coberta (esvaziada) | | A pasta existe e não está vazia | A pasta não existe/existe, mas está vazia/existe e não está vazia | o conteúdo da pasta chinesa do contêiner é sobrescrito (o conteúdo original é esvaziado, e o conteúdo da pasta no host é sobrescrito) |
Montagem de arquivo
A maior diferença entre montagem de arquivos e montagem de pastas é:
- O docker proíbe montar arquivos que não existem no host em arquivos que já existem no container
- A montagem de arquivos não tem efeito em outros arquivos na mesma pasta
Além disso, seu comportamento de sobrescrevimento é consistente com a montagem de pastas, ou seja:
- Sobrescreva o conteúdo do arquivo no contêiner com o conteúdo do arquivo no host
Os detalhes são os seguintes:
anfitrião
anfitrião | recipiente | Resultado da montagem | | Arquivos que não existem configA.js | Documentos que já existem congfigB.js | Erro, você está tentando montar um diretório em um arquivo (ou vice-versa)? Verifique se o caminho do host especificado existe e é o tipo esperado. Ele gera dois diretórios vazios configA.js e configB.js no host ao mesmo tempo, mas o container não pode iniciar |
anfitrião
anfitrião | recipiente | Resultado da montagem | | Arquivo atual configA.js | Arquivo atual congfigB.js | item chinês contêiner configB.js permanecem os mesmos, mas o conteúdo do arquivo é sobrescrito pelo conteúdo congfigA.js | | Arquivo atual configA.js | Arquivos que não existem congfigB.js | Um novo arquivo configB.js no contêiner, com o conteúdo do arquivo configA.js, permanece inalterado configB.js todos os outros arquivos sob o arquivo |
resumo
O arquivo no host sempre sobrescreverá a pasta chinesa do container
anfitrião | recipiente | Resultado da montagem | | Arquivos que não existem | Documentos que já existem | Atos proibidos | | Documentos existentes | Arquivos que não existem / arquivos que já existem | Adicionar/sobrescrever (cria um diretório caso ele não exista) |
conclusão
Montagem de pastas
- Se você permitir que pastas inexistentes ou pastas vazias sejam montadas no contêiner, as pastas correspondentes no contêiner serão esvaziadas
- Anexar uma pasta não vazia a um contêiner irá sobrescrever a pasta original no contêiner
Montagem de arquivo
- É proibido montar arquivos inexistentes em arquivos que já existam no contêiner
- Arquivos existentes serão sobrescritos quando anexados ao contêiner, e se os arquivos não existirem, eles serão criados
Cenários de aplicação
- A partir da análise acima, pode-se ver que a montagem de pastas é usada para sobrescrever arquivos em toda a pasta, então pode ser usada quando um grande número de arquivos precisa ser montado no contêiner; além disso, se uma pasta vazia ou inexistente for montada, geralmente é usada ao contrário: ou seja, após o início do contêiner, alguns arquivos (como logs) podem ser gerados sob a pasta do ponto de montagem no contêiner, e nesse momento, podem ser vistos diretamente na pasta no host correspondente.
- A montagem de arquivos é frequentemente usada para montar arquivos de configuração e modificar dinamicamente a configuração padrão em tempo de execução, pois ela sobrescrive apenas um único arquivo sem afetar outros arquivos na mesma pasta no container.
Transferido de:O login do hiperlink está visível.
(Fim) |