2016-12-27 2 views
0

Я использую Docker в первый раз. При управлении командой: make kickoff Я получаю сообщение об ошибке:Docker на Mac: невозможно запустить MySQL

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

Вы используете последнюю версию докеров? –

+0

@sonyvizio Я использую 'DockerToolbox-1.12.2' – Volatil3

+0

Что такое' make kickoff'? Похоже, что это не связано с Докером. Это какая-то оболочка, разработанная кем-то? – YoungSpice

ответ

1

При запуске Docker инструментов, докер демон работает в VirtualBox VM. Демон (и контейнеры, которые запускаются внутри этой виртуальной машины), поэтому не имеют доступа к файлам на вашем хосте (Mac OS X).

Когда вы привязываете каталоги с вашего хоста в контейнер (чтобы контейнер мог получить доступ к этим файлам), файлы всегда монтируются с хоста, на котором запускается daemon ; в вашем случае виртуальная виртуальная машина.

Docker Toolbox использует «трюк», чтобы вы могли монтировать файлы с вашего хоста; файлы внутри каталога /Users/ совместно используются виртуальной виртуальной машиной VM с использованием гостевых дополнений VirtualBox. Это означает, что когда вы бежите;

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

докер демон монтирует /Users/myname/somedir каталог из VM в контейнер. Из-за гостевой дополнения «трюк» этот путь фактически используется совместно с вашей машиной OS X, поэтому контейнер «видит» файлы с вашего компьютера OS X.

Однако каталог за пределами/Users/ не разделен между машиной OS X и виртуальной машиной. Если вы пытаетесь связать-монтировать путь, который не существует внутри виртуальной машины, docker создает пустой каталог (предполагается, что вы хотите смонтировать каталог, поскольку он не может определить, должен ли он быть каталогом или файлом) и монтирует этот каталог внутри контейнера.

В вашем примере вы пытаетесь установить привязку;

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

Внутри контейнера в;

/etc/mysql/mysql.cnf 

Каталог /Applications не совместно с ВМ, так докер создает пустой каталог имени custom-my.cnf внутри виртуальной машины, а затем пытается смонтировать этот каталог на /etc/mysql/mysql.cnf внутри контейнера. Это не удается, потому что вы не можете смонтировать каталог поверх файла, а Linux выдает ошибку «не каталог».

Для решения проблемы;

  • Переместите файлы, которые вы пытаетесь установить где-то в вашем каталоге /Users/. Обратите внимание, что гостевые дополнения VirtualBox всегда монтируют файлы/каталоги, как если бы они принадлежали пользователю 1000 и 1000; Поэтому mysql может не иметь права на запись в эти файлы.
  • Если у вас есть современный Mac, работающий под управлением ОС X 10.10 или новее, зайдите в Docker for Mac, который позволяет вам обмениваться любыми каталогами с Docker и не имеет «разрешений» «вопрос; https://docs.docker.com/docker-for-mac/troubleshoot/#/volume-mounting-requires-file-sharing-for-any-project-directories-outside-of-users
Смежные вопросы