Открытый предохранитель установлен внутри док-контейнера

379
exussum

Я пытаюсь запустить образ докера для монтирования hubic (онлайн-хранилище) и выставить его на хост

Что работает до сих пор, так это то, что контейнер правильно установил точку предохранителя (к /mnt/hubic)

При запуске docker я пытаюсь запустить с сопоставленным томом, так как /path/on/host:/mnt/hubicэто, кажется, работает (т.е. docker создает каталог, если он не существует), но содержимое никогда не появляется. Если я вхожу в контейнер, я вижу файлы из онлайн-хранилища, но в папке хоста ничего нет

Есть ли опция, которую я пропускаю, чтобы позволить docker сделать это?

Команда, которую я использую для запуска контейнера

docker run -v ~/.hubicfuse:/root/.hubicfuse -v /tmp/mounted:/mnt/hubic --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined -it

1
@kamil Я хочу прочитать файлы с хоста. Использование общего тома. Обычно внутри контейнера вы можете смонтировать каталог изнутри, чтобы он стал настоящим каталогом на хосте. Надеюсь, что это также возможно с предохранителем exussum 5 лет назад 0
См. [Этот ответ] (https://stackoverflow.com/a/43687970/165358) об использовании флага `: shared`, который также может работать для FUSE. harrymc 5 лет назад 0
@harrymc, который работал! Вы можете сделать это ответом? exussum 5 лет назад 0
Сделано в соответствии с просьбой. harrymc 5 лет назад 1

1 ответ на вопрос

2
harrymc

Решение приходит с поста s3, установленного внутри контейнера. как выставить его на хост?

В этом посте описано решение с использованием glusterFS, требующее дополнительных разрешений для контейнера. Команда docker использовала:

docker run --cap-add SYS_ADMIN --device fuse -v host_mount_dir:container_mount_dir:shared IMAGE COMMAND 

В случае ошибки типа «Path / foo монтируется в / foo, но это не общее монтирование ...», причина в том, что демон docker работает в другом пространстве имен монтирования, чем systemd. Это решение для его запуска в том же пространстве имен:

mkdir -p /etc/systemd/system/docker.service.d/ cat <<EOF > /etc/systemd/system/docker.service.d/clear_mount_propagation_flags.conf [Service] MountFlags=shared EOF 

И перезапустите демон докера.

Замечание заключается в том, что монтирование видно на хосте, если оно монтируется в каталог, связанный с -v.

Похожие вопросы