Fondo
Docker Volume nos permite montar dinámicamente algunos archivos (como archivos de configuración) para sobrescribir los archivos originales en la imagen al iniciar un contenedor Docker, pero ¿qué ocurre si montamos una carpeta o archivo que aún no existe en el host en el contenedor? LZ encontró este tipo de problema en su trabajo, por lo que lo practicó él mismo y registró los resultados experimentales de la siguiente manera:
Montura de carpeta
El comportamiento de Docker al montar carpetas es uniforme, como sigue:
- Si la carpeta no existe, se crea primero (o recursivamente si es una carpeta de varios niveles)
- Sobrescribe el contenido de la carpeta en el contenedor con el contenido de la carpeta en el host
Los detalles son los siguientes:
La carpeta en host existe y no está vacía
anfitrión | contenedor | Resultado de la montura | | Existe la carpeta no vacía A | Carpeta B que no existe | Crea primero la carpeta B en Contanier y luego copia todos los archivos de la carpeta A en B | | Existe la carpeta no vacía A | Existe la carpeta no vacía B | Primero, vacía el contenido original de la carpeta china del contenedor B y luego copia la copia china A a B |
Independientemente de si existe la carpeta B en el contenedor, A sobrescribirá completamente el contenido de B
La carpeta en host existe, pero está vacía
anfitrión | contenedor | Resultado de la montura | | Carpeta vacía A que existe | Existe la carpeta no vacía B | Se vacía el contenido de la carpeta china B del contenedor |
El contenido de la carpeta correspondiente en el contenedor se vacía
La carpeta host no existe
anfitrión | contenedor | Resultado de la montura | | Carpeta A que no existe | Existe la carpeta no vacía B | Crea la carpeta A en el host y el contenido de la carpeta B en chino del contenedor se vacía | | Carpetas A/B/C que no existen | Existe la carpeta no vacía B | Crea las carpetas A/B/C en el host y se vacía el contenido de la carpeta china B del contenedor |
El contenido de la carpeta correspondiente en el contenedor se vacía
resumen
La carpeta host definitivamente sobrescribirá la carpeta contenedor china:
anfitrión | contenedor | Resultado de la montura | | La carpeta no existe/la carpeta existe pero está vacía | La carpeta no existe/existe, pero está vacía/existe y no está vacía | La pieza china del contenedor está cubierta (vaciada) | | La carpeta existe y no está vacía | La carpeta no existe/existe, pero está vacía/existe y no está vacía | el contenido de la carpeta contenedor en chino se sobrescribe (el contenido original se vacía y el contenido de la carpeta en el host se sobrescribe) |
Montaje de archivo
La mayor diferencia entre montar archivos y montar carpetas es:
- Docker prohíbe montar archivos que no existen en el host en archivos que ya existen en el contenedor
- El montaje de archivos no afecta a otros archivos dentro de la misma carpeta
Además, su comportamiento de sobreescritura es consistente con el montaje de carpetas, es decir:
- Sobrescribe el contenido del archivo en el contenedor con el contenido del archivo en el host
Los detalles son los siguientes:
anfitrión
anfitrión | contenedor | Resultado de la montura | | Archivos que no existen configA.js | Documentos que ya existen congfigB.js | Error, ¿estás intentando montar un directorio en un archivo (o viceversa)? Comprueba si la ruta de host especificada existe y es el tipo esperado. Genera dos directorios vacíos configA.js y configB.js en el host al mismo tiempo, pero el contenedor no puede arrancar |
anfitrión
anfitrión | contenedor | Resultado de la montura | | Presente configA.js expediente | Presente archivo congfigB.js | El contenedor de objetos chinos configB.js permanece igual, pero el contenido del archivo se sobrescribe por el contenido de congfigA.js | | Presente configA.js expediente | Archivos que no existen congfigB.js | Un nuevo archivo configB.js en el contenedor con el contenido del archivo configA.js permanece sin cambios configB.js todos los demás archivos del archivo |
resumen
El archivo en el host siempre sobrescribirá la carpeta contenedora china
anfitrión | contenedor | Resultado de la montura | | Archivos que no existen | Documentos que ya existen | Actos prohibidos | | Documentos que existen | Archivos que no existen / archivos que ya existen | Añadir/sobrescribir (crea un directorio si no existe) |
conclusión
Montura de carpeta
- Si permites montar carpetas inexistentes o vacías en el contenedor, las carpetas correspondientes en el contenedor se vaciarán
- Adjuntar una carpeta no vacía a un contenedor sobrescribirá la carpeta original en el contenedor
Montaje de archivo
- Está prohibido montar archivos inexistentes en archivos que ya existan en el contenedor
- Los archivos existentes se sobrescribirán cuando se adjunten al contenedor, y si no existen, se crearán
Escenarios de aplicación
- A partir del análisis anterior, se puede ver que el montaje de carpetas se utiliza para sobrescribir archivos en toda la carpeta, por lo que puede emplearse cuando es necesario montar un gran número de archivos en el contenedor; además, si se monta una carpeta vacía o inexistente, generalmente se usa al revés: es decir, después de iniciar el contenedor, algunos archivos (como los registros) pueden generarse bajo la carpeta del punto de montaje en el contenedor, y en ese momento, pueden verse directamente en la carpeta del host correspondiente.
- El montaje de archivos se utiliza a menudo para montar archivos de configuración y así modificar dinámicamente la configuración predeterminada en tiempo de ejecución, ya que solo sobrescribe un solo archivo sin afectar a otros archivos de la misma carpeta dentro del contenedor.
Transferido desde:El inicio de sesión del hipervínculo es visible.
(Fin) |