# Recursos compartidos de archivos sincronizados (Synchronized file shares)





Synchronized file shares (recursos compartidos de archivos sincronizados) es un mecanismo alternativo de compartición de archivos que proporciona un intercambio de archivos rápido y flexible entre el host y la VM, mejorando el rendimiento de los montajes bind mediante el uso de cachés sincronizadas del sistema de archivos.

## ¿A quién va dirigido?

Synchronized file shares es ideal para desarrolladores que:

- Tienen repositorios grandes o monorepositorios (monorepos) con 100 000 archivos o más, que suman cientos de megabytes o incluso gigabytes.
- Están utilizando sistemas de archivos virtuales, como VirtioFS, gRPC FUSE y osxfs, que ya no escalan bien con sus bases de código.
- Se enfrentan a limitaciones de rendimiento con regularidad.
- No quieren preocuparse por la propiedad de los archivos ni dedicar tiempo a resolver información conflictiva sobre la propiedad de los archivos al modificar múltiples contenedores.

## ¿Cómo funciona Synchronized file shares?

Un recurso compartido sincronizado (Synchronized file share) se comporta igual que un recurso compartido de archivos virtual, pero aprovecha un motor de sincronización de código de alto rendimiento y baja latencia para crear una caché sincronizada de los archivos del host en un sistema de archivos ext4 dentro de la VM de Docker Desktop. Si realizas cambios en el sistema de archivos del host o en los contenedores de la VM, estos se propagan a través de una sincronización bidireccional.

Después de crear una instancia de recurso compartido de archivos, cualquier contenedor que utilice un montaje bind que apunte a una ubicación en el sistema de archivos del host que coincida con la ubicación especificada del recurso compartido sincronizado, o un subdirectorio dentro de ella, utilizará la característica Synchronized File Shares. Los montajes bind que no cumplan esta condición se pasarán al [mecanismo de montaje bind](/engine/storage/bind-mounts/) normal del sistema de archivos virtual, por ejemplo, VirtioFS o gRPC-FUSE.

> [!NOTE]
>
> Synchronized file shares no es utilizado por los volúmenes `hostPath` de Kubernetes en Docker Desktop.

> [!IMPORTANT]
>
> Synchronized file shares no está disponible en WSL ni al usar contenedores de Windows.

## Crear una instancia de recurso compartido de archivos

Para crear una instancia de recurso compartido de archivos:

1. Inicia sesión en Docker Desktop.
2. En **Settings**, dirígete a la pestaña **File sharing** dentro de la sección **Resources**.
3. En la sección **Synchronized file shares**, selecciona **Create share**.
4. Selecciona una carpeta del host para compartir. El recurso compartido sincronizado debería inicializarse y quedar listo para su uso.

Los recursos compartidos de archivos tardan unos segundos en inicializarse mientras los archivos se copian en la VM de Docker Desktop. Durante este tiempo, el indicador de estado muestra **Preparing**. También hay un icono de estado en el pie de página del Dashboard de Docker Desktop que te mantiene informado de las actualizaciones.

Cuando el indicador de estado muestra **Watching for filesystem changes**, tus archivos están disponibles para la VM a través de todos los mecanismos estándar de montaje bind, ya sea con `-v` en la línea de comandos o especificado en tu archivo `compose.yml`.

> [!NOTE]
>
> Al crear un servicio, establecer la [consistencia de la opción del montaje bind](/reference/cli/docker/service/create/#options-for-bind-mounts) en `:consistent` omite Synchronized file shares.

## Explorar tu instancia de recurso compartido de archivos

La sección **Synchronized file shares** muestra todas tus instancias de recursos compartidos de archivos y proporciona información útil sobre cada una de ellas, incluyendo:

- El origen del contenido del recurso compartido
- Una actualización de estado
- Cuánto espacio está utilizando cada recurso compartido
- El número de entradas del sistema de archivos
- El número de enlaces simbólicos (symbolic links)
- Qué contenedor(es) está(n) utilizando la instancia de recurso compartido de archivos

Al seleccionar una instancia de recurso compartido de archivos, se despliega el menú y se muestra esta información.

## Utilizar `.syncignore`

Puedes usar un archivo `.syncignore` en la raíz de cada recurso compartido de archivos para excluir archivos locales de tu instancia de recurso compartido. Admite la misma sintaxis que los archivos `.dockerignore` y excluye, y/o vuelve a incluir, rutas de la sincronización. Los archivos `.syncignore` se ignoran en cualquier ubicación que no sea la raíz del recurso compartido de archivos.

Algunos ejemplos de elementos que podrías querer añadir a tu archivo `.syncignore` son:

- Directorios de dependencias grandes, por ejemplo, los directorios `node_modules` y `composer` (a menos que dependas de acceder a ellos a través de un montaje bind)
- Directorios `.git` (de nuevo, a menos que los necesites)

En general, utiliza tu archivo `.syncignore` para excluir elementos que no sean críticos para tu flujo de trabajo, especialmente aquellos que serían lentos de sincronizar o que utilizarían un espacio de almacenamiento significativo.

## Problemas conocidos

- Los cambios realizados en `.syncignore` no provocan eliminaciones inmediatas a menos que se vuelva a crear el recurso compartido de archivos. En otras palabras, los archivos que pasen a estar ignorados debido a modificaciones en el archivo `.syncignore` permanecen en su ubicación actual, pero ya no se actualizan durante la sincronización.

- Las instancias de recursos compartidos están limitadas a aproximadamente 2 millones de archivos por recurso compartido. Para un mejor rendimiento, si tienes una instancia de este tamaño, intenta descomponerla en múltiples recursos compartidos que correspondan a ubicaciones de montajes bind individuales.

- Los conflictos de mayúsculas y minúsculas (debido a que Linux distingue entre mayúsculas y minúsculas y macOS/Windows solo las conserva) se muestran como problemas de **File exists** en la GUI. Estos se pueden ignorar. Sin embargo, si persisten, puedes informar del problema.

- Synchronized file shares informa proactivamente de problemas temporales, lo que puede dar lugar a que aparezcan ocasionalmente indicadores de **Conflict** y **Problem** en la GUI durante la sincronización. Estos se pueden ignorar. Sin embargo, si persisten, puedes informar del problema.

- Si cambias de WSL2 a Hyper-V en Windows, Docker Desktop debe reiniciarse por completo.

- No se admiten las rutas de Windows de estilo POSIX. Evita configurar la variable de entorno [`COMPOSE_CONVERT_WINDOWS_PATHS`](/compose/how-tos/environment-variables/envvars/#compose_convert_windows_paths) en Docker Compose.

- Si no tienes los permisos correctos para crear enlaces simbólicos y tu contenedor intenta crearlos en tu instancia de recurso compartido, se mostrará un mensaje de error **unable to create symbolic link**. Para usuarios de Windows, consulta la [documentación de Microsoft sobre creación de enlaces simbólicos](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/create-symbolic-links) para conocer las buenas prácticas y la ubicación de la configuración de directiva de seguridad **Create symbolic links**. Para usuarios de Mac y Linux, comprueba que tienes permisos de escritura en la carpeta.

