Любой Unix Wizardy для монтирования устройства в голой металлической ОС из контейнера. - PullRequest
0 голосов
/ 13 ноября 2018

Мы используем контейнеры для предоставления хранилища на наших узлах хранения, но я не могу на всю жизнь понять, как смонтировать устройство на «голую железную» ОС из контейнера. Как голый металл, так и контейнеры работают под управлением Oracle Linux 7.5.

Мы не можем использовать для этого ssh в любой форме. Это изолированная вычислительная среда, и единственный доступ - через оркестровку, которую мы используем для управления контейнерами.

Я в основном парень из соляриса, поэтому мне интересно, есть ли какая-нибудь магия linux, я могу здесь поработать.

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

Спасибо за любую помощь

* уточнение *

Это , а не о монтировании тома в контейнер.

Этот контейнер является контейнером временного обеспечения, т. Е. Он выполняет такие операции, как монтирование томов iscisi, создание групп томов, создание логических томов и создание файловых систем.

Эта часть работает нормально.

Последний шаг, который должен выполнить этот контейнер, - это как-то сообщить операционной системе BARE METAL, чтобы монтировать устройство в систему файлов. НЕ В КОНТЕЙНЕРЕ.

Упрощенный пример: мне нужен этот контейнер, чтобы как-то сказать ОС "mount / dev / sdg /data".

Это крепление не обязательно должно быть доступно для контейнера. Контейнер уничтожается, как только он выделяет хранилище и монтирует его.

И мы не можем использовать SSH для этого.

1 Ответ

0 голосов
/ 13 ноября 2018

Необходимо решить несколько проблем.

  1. По умолчанию Docker не имеет доступа к блочным устройствам на хосте.

  2. Докер-контейнер не может изменить свое собственное пространство имен монтирования.

  3. Докер-контейнер работает в закрытом пространстве имен монтирования, поэтому даже после решения (1) и (2) любые монтирует васmake внутри контейнера не будет виден с хоста.

К счастью, есть решения для всего вышеперечисленного!

Мы можем решить (1) и (2), передав флаг --privileged на docker run.Это снимает все ограничения, которые Docker обычно накладывает на контейнер.

Для решения (3) нам нужно использовать опцию --mount вместо опции -v, так как нам нужно изменить стильиспользуется гора распространения.Читая документацию о bind-mounts , мы видим, что опция --mount поддерживает следующие параметры:

  • Тип монтирования, которое может быть связано, объем или tmpfs.В этом разделе обсуждается bind mounts, поэтому тип всегда будет bind.
  • Источник монтирования.Для bind mounts это путь к файлу или каталогу на хосте демона Docker.Может быть указан как source или src.
  • Место назначения принимает в качестве значения путь, по которому файл или каталог будут смонтированы в контейнере.Может быть указано как destination, dst или target.
  • Опция только для чтения, если имеется, позволяет монтировать привязку в контейнер только для чтения.
  • Опция распространения привязкиесли присутствует, изменяет распространение привязки.Может быть одним из rprivate, private, rshared, shared, rslave, slave.
  • Параметр согласованности, если он есть, может быть согласованным, делегированным или кэшированным.Этот параметр применяется только к Docker для Mac и игнорируется на всех других платформах.

Нам важна опция bind-propagation.Значения для этого описаны позже в том же документе .Прочитав их, мы, вероятно, захотим rshared.

Вооружившись этим знанием, я могу запустить:

docker run -it \
  --mount type=bind,source=/,dst=/host,bind-propagation=rshared \
  --privileged alpine sh

Затем внутри контейнера, который я могу запустить, например:

mount /dev/sdd1 /host/mnt

И на хосте я вижу содержимое /dev/sdd1, установленного на /mnt.Крепление будет сохраняться после выхода из контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...