Solucionado! – Cannot start a container. System error: not a directory – Docker Compose

dockerDespués de estar un tiempo utilizando Docker en mis proyectos de desarrollo un buen día, sin previo aviso, todo empezó a ir mal.

Al intentar levantar unos containers con docker-compose up la ejecución se detenía con un error extraño: Cannot start container XXXXX: System error: not a directory.

docker-01-not-a-directory

Pasado el susto inicial empecé a investigar qué podia estar fallando en un sistema que no daba problemas. De entrada descarté posibles upgrades del motor Docker. El sistema seguia siendo el mismo.

Analizando el fichero docker-compose.yml llegué a la conclusión de que el problema ocurria en las imágenes que querían montar ficheros desde el apartado volumes:docker-01b-file-volumes

Buscando en Internet la mayoría de comentarios dicen que por lo visto docker-compose ya no deja montar ficheros mediante volúmenes. Esta explicación era rara, porque una primera solución fue comentar las lineas que montaban ficheros, levantar docker-compose, detener el container, descomentar y volver a levantar.

En ese momento ya no daba problemas y el fichero aparecía en su lugar correspondiente.

No tenia sentido. Decidí inspeccionar el contenedor, docker inspect <containername>, que daba problemas para recabar más información.docker-02-volumes

Todo parecia correcto, pero aún tenía otro lugar a revisar.

Mi entorno de desarrollo es un Mac OSX, con lo que para permitir que Docker se ejecute he de utilizar docker-machine via VirtualBox como intermediario entre OSX y Docker.

Inicié sesión y miré los volúmenes que docker-machine tenia disponibles.

docker-03-ssh-login

docker-04-no-users-folder

Enseguida ví el problema. Se supone que en Mac docker-machine al instalarse en VirtualBox crea una carpeta compartida o shared folders, dando permisos de escritura al directorio /Users para que la máquina virtual docker pueda acceder y gestionar los datos.

En el listado anterior no aparecía. Mediante la GUI de VirtualBox la generé de forma manual.

docker-05-create-users-shared-folder-virtualbox

Apagué la máquina virtual, y luego via docker-machine la volví a iniciar y para ver el resultado.

docker-06-restart

Ahora ya aparecía una entrada /Users en el listado de mount.

Cerré la sesión en docker-machine y intenté levantar de nuevo docker-compose. En esta ocasión todo volvió a la normalidad y los contenedores se iniciaron sin más problemas. docker-07-up-again

Por lo visto, docker-machine no tenia acceso a los recursos debido a que no tenia disponible el shared folder de /Users. Pensándolo con más calma todo se debió a una prueba anterior que realicé con el docker-osx-dev. Este es un sistema que utiliza rsync para sincronizar directorios locales del host con el contenedor.

Se utiliza para sustituir los shared folders gestionados por VirtualBox, que son más lentos, por un sistema rsync que permite una mayor velocidad. Pero el primer paso que realiza docker-osx-dev es eliminar la carpeta compartida de VirtualBox debido a que no la necesita.

Una vez descubierto el problema, ya tiene sentido y por fin puedo volver a utilizar Docker sin mayores contratiempos.

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *