Los montajes de volumen de Docker para Mac se comportan de manera diferente al sistema Docker base. Esto se debe principalmente a que Docker intenta cumplir con las pautas de la zona de pruebas del sistema de archivos de Apple.
Como se muestra en las preferencias de Docker, macOS solo exporta ciertas rutas.
/Users
/Volumes
/tmp
/private
/var
en macOS es un enlace simbólico a /private
. Eso también es cierto para /tmp
:
$ ls -ld /tmp /var
lrwxr-xr-x@ 1 root wheel 11 Jan 26 16:18 /tmp -> private/tmp
lrwxr-xr-x@ 1 root wheel 11 Jan 26 16:18 /var -> private/var
¿Por qué /tmp
aparece en el panel para compartir, pero /var
no (aunque ambos forman parte de /private
)? La documentación de Docker para Mac sobre los espacios de nombres del sistema de archivos explica:
Por defecto, se puede compartir archivos en /Users/
, /Volumes/
, /private/
, y /tmp
directamente. Para agregar o eliminar árboles de directorios que se exportan a Docker, use la pestaña Compartir archivos en el menú de preferencias de Docker -> Preferencias -> Compartir archivos. (Ver Preferencias).
Todas las demás rutas utilizadas en los -v
montajes de enlace se obtienen de la máquina virtual Moby Linux que ejecuta los contenedores Docker, por lo que los argumentos como -v /var/run/docker.sock:/var/run/docker.sock
deberían funcionar como se esperaba. Si una ruta de macOS no se comparte y no existe en la VM, un intento de vincular el montaje fallará en lugar de crearla en la VM. Docker reserva las rutas que ya existen en la máquina virtual y contienen archivos y no se pueden exportar desde macOS.
Tenga en cuenta que /var/run
aquí se menciona específicamente como un lugar que se montaría desde la máquina virtual de Linux, en lugar de desde macOS.
Cuando solicita un montaje de volumen, primero se comprueban las exportaciones del sistema de archivos macOS. Si no hay ninguna coincidencia allí, la máquina virtual de Linux donde se ejecuta Docker se marca a continuación. Si ninguno de ellos tiene la ruta solicitada, entonces el montaje falla.
En su caso, /var
macOS no lo exporta. /var
existe en la máquina virtual de Linux, pero /var/folders
no. Por lo tanto, la ruta no está disponible y el montaje falla.
Si cambia la ruta a /private/var
, tendrá éxito, porque macOS exporta todo el /private
árbol del sistema de archivos para su montaje.
Para hacer las cosas más portátiles, es posible que desee probar en qué plataforma se está ejecutando actualmente y, si es macOS, prefijo la ruta de montaje con /private
.
-v /private/var/folders/zz/...
?