Хорошо, есть несколько моментов, которые необходимо решить здесь.
Давайте начнем с того, что представляет собой объем докеров (попробуйте не думать о вашем macbook или бродяжней машине в этот момент.Просто помните о том, что докеры используют другую файловую систему, где бы она ни находилась в данный момент): Возможно, предположите, что это так, само по себе каждый том в Docker является лишь частью внутренней докеры файловой системы , Контейнеры могут использовать тезисы томов, как они были «маленькими жесткими дисками», которые могут быть установлены ими, а также разделены между ними (или установлены двумя из них в одно и то же время, например, установка супер быстрой версии некоторого ftp-сервера на два клиенты или что-то еще: P).
В принципе вы можете объявить эти тома (все еще не задумываясь о своем компьютере/бродяге, просто докеры;)) с помощью инструкции VOLUME в Dockerfile. Стандартный пример, запустить один веб-сервер контейнер так:
FROM: nginx
VOLUME /www
Теперь все, что происходит в/WWW может теоретически быть установлены и демонтирован из контейнера, а также установлен на несколько контейнеров. Теперь только Nginx скучно, поэтому мы хотим, чтобы php запускал файлы, которые nginx хранит, чтобы создать еще более интересный контент. => Нам нужно установить этот том в некоторый контейнер php-fpm. Ergo в нашем файле создания письма мы делаем это
web:
image: nginx
php:
image: php-fpm
volumes_from:
- web
=> вуаля! каждая папка, объявленная директивой VOLUME в контейнере nginx/web, будет видна в php. Важно отметить, что все, что находится в nginx's/www, будет переопределять все, что php имеет в/www. Если вы положили: ro, php не может даже записать в эту папку :)
Теперь, приближаясь к вашей проблеме, есть второй способ объявить тома, что не требует их объявления в файле Docker. Это можно сделать, установив объемы с хоста (в этом случае ваш бродяга/boo2docker thingy). Давайте обсудим это, как будто мы работаем на родном Linux.
Если бы вы были поставить что-то вроде:
volumes:
- /home/myuser/folder:/folder
в вашем Докер-compose.yml, то это будет означать, что/дома/MyUser/папка будет установлена в докер. Он будет переопределять все, что имеет докер в папке/и так же, как/www также будет доступно из того, что его объявило. Теперь на машине Linux работает демон docker.
Так много для теории :), на самом деле вы, вероятно, нужно просто следующие советы, чтобы получить Ваш материал собирается :):
Путь boot2docker/докер-машина/kitematic и все эти вещи иметь дело с проблемой просто потому, что они в первую очередь просто монтируют том в бродящей машине на контейнеры докеров, а также просто монтируют эту вещь в вашу файловую систему Mac, надеясь, что все это сработает: P
Теперь для практического проблема, которую мы все используем (или просто пытаемся помочь своим коллегам в мир сладкого сладкого Докера: P) на Mac, - это разрешения. Я имею в виду думать об этом (root или какой-либо другой пользователь обрабатывает файлы в контейнере, пользовательский бродяга может обрабатывать файлы на бродячем хосте, а затем ваш пользователь Mac «skalfyfan» обрабатывает эти файлы на Mac.Они имеют разные идентификаторы пользователя и whatnot = > многие проблемы возникают с этим и в некоторой степени зависят от того, что вы на самом деле выполняете в Docker. Mysql и Apache особенно болезненны, потому что они не запускаются как root в контейнере. Это означает, что у них часто возникают проблемы с записью в файл Mac system
Перед тем, как попробовать второй подход ниже, просто попробуйте поместить свои тома контейнера под свою домашнюю директорию Mac. Это позволит решить проблемы с MySQL в большинстве случаев, как я нашел с течением времени. Btw: Не нужно декларировать полные пути к томам ./folder отлично и читать относительно места, в котором находится ваш docker-compose.yml!
Просто поместите compose-yml в папку для пользователей Mac, это все, что имеет значение. Нет chmod 777 -R: P поможет вам здесь, он просто должен находиться под вашей домашней папкой :)
Еще некоторые приложения (например, Apache) по-прежнему будут вам нелегко. Тот факт, что идентификатор пользователя, который работает в контейнере, отличается от вашего идентификатора пользователя Mac, превратит вашу жизнь в ад. Чтобы обойти это, вам необходимо настроить идентификатор пользователя, а также группу пользователей таким образом, чтобы это не противоречило разрешениям вашего Mac. Группа, которую вы хотите на Mac является внимательные сотрудники, UID, который работает бы, например 1000. Таким образом вы могли бы поставить это в конце вашего Dockerfile:
RUN usermod -u 1000 www-data
RUN usermod -G staff www-data
или
RUN usermod -u 1000 mysql
RUN usermod -G staff mysql
Итак, как вы уже узнали:
в теории я думаю, что должно быть обязательно скопировать мой локальный макинтош файл системы папок ./src к моей VM первым, а затем я этот объем декларация. Кажется, что докер-сочинение волшебным образом все это делает сразу ?
Права на, он делает это :)
Наконец, мы можем видеть, что я создаю контейнер данных только сохраняться моих данных MySQL. Я объявил: тома: -/вар/Lib/MySQL
Это один вы ошибались :) Как упоминалось выше, если вы не даете папку хоста, то Docker будет сохраняться этот путь. Но только для этого контейнера и все останутся в файловой системе докера. Ничего не написано на хосте вообще! Это всегда произойдет, только если вы предоставите папку хоста перед папкой контейнера!
Надеется, что это помогло :)
ответить ли http://stackoverflow.com/questions/23439126/how-to-mount-host-directory-in-docker-container/33404132#33404132 вашего вопрос? – Eli