Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 9379|Respuesta: 0

El archivo o la carpeta no existen cuando se monta el volumen Docker

[Copiar enlace]
Publicado en 8/11/2021 9:20:35 | | |
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 ACarpeta B que no existeCrea primero la carpeta B en Contanier y luego copia todos los archivos de la carpeta A en B
Existe la carpeta no vacía AExiste la carpeta no vacía BPrimero, 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 existeExiste la carpeta no vacía BSe 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 existeExiste la carpeta no vacía BCrea 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 existenExiste la carpeta no vacía BCrea 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íaLa carpeta no existe/existe, pero está vacía/existe y no está vacíaLa pieza china del contenedor está cubierta (vaciada)
La carpeta existe y no está vacíaLa carpeta no existe/existe, pero está vacía/existe y no está vacíael 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.jsDocumentos que ya existen congfigB.jsError, ¿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 expedientePresente archivo congfigB.jsEl contenedor de objetos chinos configB.js permanece igual, pero el contenido del archivo se sobrescribe por el contenido de congfigA.js
Presente configA.js expedienteArchivos que no existen congfigB.jsUn 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 existenDocumentos que ya existenActos prohibidos
Documentos que existenArchivos que no existen / archivos que ya existenAñ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)




Anterior:Elasticsearch utiliza elasticdump para hacer copias de seguridad y migrar datos
Próximo:Solución de excepción de errores de Docker POI
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com