2017-01-20 9 views
2

У меня есть два контейнера, которые в одном из них я использую файловую систему gluster для монтирования файлов, которые мне нужны, в каталог mnt моего контейнера, и я использую VOLUME /mnt в моем файле Dockerfile для совместного использования объема. я запускаю этот контейнер с этим:docker --volumes-from not mount any files

docker run -d --cap-add SYS_ADMIN --device=/dev/fuse:/dev/fuse -e MOUNTPOINT="server1:test" -e TARGET="/mnt" --name gluster gluster-client 

, и я хочу использовать эти файлы во втором контейнере, который является Nginx контейнер таким образом я запускаю этот контейнер, используя --volumes-из употребления, что общий объем, это как я бег моего контейнера:

docker run -it --volumes-from gluster nginx sh 

мой Gluster контейнер работает нормально, я имею в виду, я проверил каталог монтирования (здесь/MNT) и я могу видеть файлы, но во втором контейнере, что я usig докер - томов - из-за отсутствия файлов в каталоге/mnt, похоже, что он может монтировать каталог, но не файлы внутри этих каталогов, как я могу его исправить ?, это потому, что я используя блеск или что?

контейнер для снегопада основан на контейнерах fedora и nginx на основе альпийских.

Я ценю вашу помощь :)

ответ

1

Это может быть из-за SELinux. Попробуйте запустить второй контейнер, как

docker run -it --volumes-from gluster:z nginx sh 

От docker run reference documentation:

Этикетировочные системы, как SELinux требует, чтобы соответствующие этикетки размещены на объемного содержания, установленного в контейнер. Без метки система безопасности может помешать процессам, выполняющимся внутри контейнера, с с использованием содержимого. По умолчанию Docker не меняет набор меток ОС.

Чтобы изменить ярлык в контексте контейнера, вы можете добавить один из два суффикса: z или: Z на уровень громкости. Эти суффиксы сообщают Docker о переделке файловых объектов на общих томах. Опция z сообщает Docker, что два контейнера совместно используют объемный контент. В результате Докер подписывает содержимое с помощью общей метки контента. Общий том ярлыки позволяют всем контейнерам читать/писать содержимое. Опция Z указывает Docker для маркировки содержимого с помощью частной ярлыки с неразделенной подпиской. Только текущий контейнер может использовать личный том.

О том же аргументе вы можете найти более подробную информацию о Using Volumes with Docker can Cause Problems with SELinux и Practical SELinux and Containers.

EDIT: Если это не причина, ваша проблема должна возникнуть из-за контейнера glusterfs и данных. Попробуйте использовать именованные тома.

Изменение VOLUME линии в первом контейнере

VOLUME myVolume:/mnt 

и во втором контейнере, вместо --volumes-from, вы можете использовать --volume=myVolume.

Подробнее о контейнере данных и названных томах на Docker Data Containers and Named Volumes и Docker named volume explained.

+0

Я попробовал, но это не исправило мою проблему, к сожалению! –

+0

Отредактированный ответ после вашего комментария. – gile

+0

Я тоже пробовал именованные тома, но это не имело никакого значения, поэтому пока я не найду решение, я монтирую файлы glusterfs на локальном компьютере и использую эти локальные файлы в контейнере nginx. –