我第一次使用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
答案 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会产生错误“不是目录”。
解决您的问题;
/etc/mysql/mysql.cnf
目录中的某个位置。请注意,VirtualBox guest虚拟机添加程序始终安装文件/目录,就像它们由用户1000和组1000拥有一样;因此,mysql可能没有对这些文件的写访问权