Вопрос: Можно ли как-нибудь переместить/скопировать mount из одного пространства имен в другое?
Пояснение: Я хотел бы смонтировать каталог, которого не существовало при создании контейнера.
SourceDirectory
SourceDirectory
в /container_rootfs/tempDirectory
/tempDirectory
, чтобы он попал в SourceDirectory
Шаг 4. не работает, потому что на шаге 3 монтирование общей привязки доступно только для текущее пространство имен монтирования хоста, а пространство имен контейнера уже было "разделено" ранее.Я получаю /tempDirectory
, как будто я бы вообще не делал шаг 3.
Если каталог существовал и монтирование было выполнено досоздания контейнера (то есть порядок операций из пронумерованного списка выше 2 > 3 > 1 > 4), тогда все работает нормально, так как теперь у контейнера скопировано пространство имен монтирования послемоего дополнительного монтирования привязки было создано. А сохранение в /tempDirectory
переносится в SourceDirectory
.
Итак, мой вопрос: есть ли способ переместить/скопировать монтирование из одного пространства имен (пространство имен монтирования моего хоста) в другое (пространство имен монтирования контейнера)?
Если это уместно (что я так не думаю), я использую crun для контейнеров.
Я не знаю, как задним числом скопировать или переместить существующее средство передвижения, но...
Вы можете выполнить команду mount --bind
непосредственно в пространстве имен контейнера с помощью nsenter .
Вы должны указать pid (идентификатор процесса )для процесса, работающего в контейнере. Вы можете использовать любой процесс в контейнере, если сможете его найти.
--pid-file
в crun . ps -ef
для поиска процесса, работающего в контейнере. Помните, что контейнер может находиться в пространстве имен pid и давать pid внутри контейнера, отличные от pid хоста. Вам нужен pid, как его видит хост. Предполагая, что ваш процесс в контейнере имеет pid 4321
, вы должны иметь возможность монтировать, используя:
nsenter -mt 4321 mount --bind SourceDirectory /container_rootfs/
Чтобы поэкспериментировать с nsenter
, я предлагаю сначала попробовать интерактивную командную строку. Если pid для вашего процесса в контейнере 4321
, используйте:
nsenter -mt 4321 /bin/bash
Помните, что существует разница между пространством имен монтирования и chroot . Ваши контейнерные процессы будут помещены в собственное пространство имен монтирования, но также будут chroot. В зависимости от того, как это было сделано, nsenter
также может привести или не привести к chroot.
Если вы смонтировали SourceDirectory
после того, как контейнер был запущен, и если он вообще не смонтирован в пространстве имен вашего контейнера, возможно, его можно смонтировать так, как вы это делали раньше...
Из того, что я читал , можно монтировать раздел дважды, поэтому, если вы уже выполнили mount /dev/sda4
на хосте, обычно можно выполнить mount /dev/sda4
в контейнере. Результат будет таким же, как если бы вы использовали привязку.