Как мне смонтировать private /proc внутри пространства имен внутри контейнера docker?

Эта команда работает:

sudo docker run --cap-add=sys_admin --security-opt label:disable -it fedora:rawhide /bin/sh -c 'for dir in $(awk '"'"'/\/proc\// { print $5; }'"'"' /proc/1/mountinfo ); do umount "$dir"; done; /usr/bin/unshare -Ufmp -r /bin/sh -c '"'"'mount --make-private / ; mount -t proc proc /proc ; ls /proc'"'"

Я не разделил его на несколько строк, потому что цитирование действительно важно. По сути, он размонтирует целую кучу вещей в /proc перед запуском разделите и установите /proc в пространстве имен дочернего пользователя.

Docker монтируется поверх множества каталогов и файлов в /proc со своими собственными каталогами, которые являются пустыми каталогами tmpfs и пустыми файлами. Различные файлы в /proc представляют значения, применимые ко всей системе. На самом деле, /proc/kcore это позволило бы вам читать память ядра внутри контейнера, если бы вы были root, что, поскольку многие люди хотят верить, что контейнеры - это своего рода облегченная виртуальная машина или что-то в этом роде, удивило бы многих людей.

Ядро в (во всяком случае, начиная с версии 4.14) fs/namespace.c:mnt_already_visible проверяет, монтируете ли вы уже смонтированную файловую систему, и если в этой файловой системе есть объекты, смонтированные как дочерние файловые системы, и у этих подключений есть флаг MNT_LOCKED, происходит сбой. Флаг MNT_LOCKED, похоже, применяется (я не выяснял, где он находится в ядре) ко всем монтированиям всякий раз, когда вы создаете пространство имен пользователя, чтобы предотвратить размонтирование объектов в этом пространстве имен (потому что вы получаете привилегии "внутри" пространства имен пользователя) и снова делаете скрытые объекты видимыми.

Команда, которую я опубликовал, использует awk-скрипт для содержимого /proc/1/mountinfo чтобы извлечь все подкаталоги и файлы в /proc этот докер смонтировал и размонтировал их все. Это делает /proc файловая система снова монтируется во вложенных пользовательских пространствах имен.