Mac上的Docker:无法运行MySQL

时间:2016-12-27 19:41:25

标签: mysql docker docker-compose dockerfile

我第一次使用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

1 个答案:

答案 0 :(得分:1)

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

将主机中的目录绑定到容器中(以便容器可以访问这些文件)时,始终从运行守护程序的主机安装文件;在您的情况下,VirtualBox VM。

Docker Toolbox使用“技巧”来允许您从主机安装文件; /Users/目录中的文件使用VirtualBox“guest adds”与VirtualBox VM共享。这意味着当你跑步时;

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

docker守护程序将/Users/myname/somedir目录从VM 安装到容器中。由于guest添加“技巧”,这个路径实际上与您的OS X机器共享,因此容器“看到”OS X机器上的文件。

但是, /Users/目录之外的任何目录不会在OS X计算机和VM之间共享。如果您尝试绑定安装VM中不存在的路径,则docker会创建一个空的目录(它假定您要挂载一个目录,因为它无法判断它是否应该是目录或文件),并将该目录安装在容器内。

在您的示例中,您尝试绑定mount;

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

容器内的;

/etc/mysql/mysql.cnf

/Applications目录未与VM共享,因此docker在VM中创建一个名为custom-my.cnf的空目录,然后尝试在{{1在容器内。这失败了,因为您无法在文件顶部安装目录,Linux会产生错误“不是目录”。

解决您的问题;