mac instalar compose community macos docker docker-for-mac

macos - instalar - Docker: Monturas denegadas. Las rutas... no se comparten desde OS X y Docker no las conoce



install docker mac brew (2)

Como ejemplo, usando Portainer, este comando funciona para mí:

docker run -d --restart unless-stopped -p 9000:9000 / -v /var/run/docker.sock:/var/run/docker.sock / -v /var:/data portainer/portainer --no-auth

Pero, si varío los datos -v /var:/data , no funcionará. Creo (pero no estoy seguro) que es porque Docker está tratando de hacer un mkdir. Entonces, si intento montar -v /var/whatever:/data , mkdir falla porque no hay suficiente permiso y no funciona.

Tengo 2 Mac (High Sierra) y lo probé en ambos. El mismo problema. Además, intenté usar el canal Docker Beta. Creo que entiendo la respuesta de Dan Lowe: actualizaré esta respuesta si eso funciona para mí.

El comando docker run -v /var/folders/zz/... produce el siguiente error.

docker: Error response from daemon: Mounts denied: The paths /var/folders/zz/... and /var/folders/zz/... are not shared from OS X and are not known to Docker. You can configure shared paths from Docker -> Preferences... -> File Sharing.

Cuando abro File Sharing, veo que / private ya aparece en la lista.

Si intento agregar /var/folder/ , se resuelve en /private/var/folders /var/folder/ , que es un subconjunto de / private y, por lo tanto, se rechaza la adición.

Para resumir, me parece que el directorio /var/folders/.. es compartido por OS X como un subdirectorio de /private y, por lo tanto, Docker debe conocerlo. Cualquier ayuda para resolver esto sería apreciada.

Como experimento, reemplacé las /private/var/folders /private en Compartir archivos con /private/var/folders y reinicié la ventana acoplable, pero el resultado no cambió.

Solo para una referencia más completa, este es el script .sh , que ejecuta este script python , que a su vez ejecuta el comando docker.


Los montajes de volumen de Docker para Mac se comportan de manera diferente que el sistema base de Docker. Esto se debe principalmente a que Docker intenta cumplir con las pautas de sandbox 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 en /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é aparece /tmp en el panel de compartir, pero /var no (aunque ambos son parte de /private )? La documentación de Docker para Mac sobre los espacios de nombres del sistema de archivos explica:

De manera predeterminada, puede compartir archivos en /Users/ , /Volumes/ , /private/ y /tmp directamente. Para agregar o eliminar árboles de directorio que se exportan a Docker, use la pestaña Compartir archivos en el menú de ballenas de preferencias de Docker -> Preferencias -> Compartir archivos. (Ver Preferencias).

Todas las otras rutas utilizadas en los montajes de -v provienen de la VM Moby Linux que ejecuta los contenedores Docker, por lo que argumentos como -v /var/run/docker.sock:/var/run/docker.sock deberían funcionar como se espera. Si una ruta de macOS no se comparte y no existe en la máquina virtual, un intento de enlazar el montaje fallará en lugar de crearla en la máquina virtual. Docker reserva las rutas que ya existen en la VM y que contienen archivos y no se pueden exportar desde macOS.

Tenga en cuenta que /var/run se menciona específicamente aquí como un lugar que se montaría desde la VM de Linux, en lugar de desde macOS.

Cuando solicita un montaje de volumen, primero se verifican las exportaciones del sistema de archivos macOS. Si no hay coincidencia allí, la máquina virtual Linux donde se ejecuta Docker se verifica a continuación. Si ninguno de ellos tiene la ruta que solicitó, el montaje falla.

En su caso, macOS no exporta /var . /var existe en la máquina virtual Linux, pero /var/folders no. Por lo tanto, la ruta no está disponible y el montaje falla.

Si cambia la ruta a /private/var , entonces tendrá éxito, porque macOS exporta todo el árbol del sistema de archivos /private 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, prefije la ruta de montaje con /private .