Mac上的Docker:无法运行MySQL

我第一次使用Docker。 在运行命令: make kickoff我收到错误:

 myapp_php_apache_engine_dev is up-to-date Starting myapp_mysql_dev ERROR: for mysql Cannot start service mysql: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"process_linux.go:359: container init caused \\\"rootfs_linux.go:53: mounting \\\\\\\"/Applications/MAMP/htdocs/clients/codingmachine/myapp/mysql/custom-my.cnf\\\\\\\" to rootfs \\\\\\\"/mnt/sda1/var/lib/docker/aufs/mnt/2ab6b2578ad9f8da2d453aefa5cd9b288fee30dd2d73efc3048627cf0861d55a\\\\\\\" at \\\\\\\"/mnt/sda1/var/lib/docker/aufs/mnt/2ab6b2578ad9f8da2d453aefa5cd9b288fee30dd2d73efc3048627cf0861d55a/etc/mysql/mysql.cnf\\\\\\\" caused \\\\\\\"not a directory\\\\\\\"\\\"\"\n" ERROR: Encountered errors while bringing up the project. make: *** [up] Error 1 

运行docker工具箱时,docker守护进程将在VirtualBox虚拟机中运行。 守护进程(以及在该虚拟机内运行的容器)因此无法访问主机(Mac OS X)上的文件。

当你从你的主机绑定一个目录到容器(这样容器可以访问这些文件)时,文件总是从守护进程运行的主机上挂载; 在你的情况下,VirtualBox虚拟机。

Docker Toolbox使用“窍门”来允许你从主机上挂载文件; /Users/目录中的文件使用VirtualBox“guest添加”与VirtualBox VM共享。 这意味着当你跑步时,

 docker run -v /Users/myname/somedir:/var/www/html -d nginx 

/Users/myname/somedir守护程序将VM中/Users/myname/somedir目录挂载到容器中。 由于客人添加“技巧”,这个path实际上是与您的OS X机器共享,所以容器“看到”您的OS X机器的文件。

但是,在OS X机器和VM之间不共享/Users/目录之外的任何目录。 如果你尝试绑定一个不存在于虚拟机内部的path,docker会创build一个空目录 (假设你想挂载一个目录,因为它无法判断它应该是目录还是文件),并在容器中安装该目录。

在你的例子中,你尝试绑定挂载;

 /Applications/MAMP/htdocs/clients/codingmachine/myapp/mysql/custom-my.cnf 

在容器里面;

 /etc/mysql/mysql.cnf 

/Applications目录不与VM共享,因此docker会在虚拟机内部创build一个名为custom-my.cnf的空目录 ,然后尝试将该目录挂载到容器内的custom-my.cnf 。 这会失败,因为你不能在一个文件上安装一个目录,而且Linux会产生一个“不是目录”的错误。

解决你的问题;