По умолчанию Docker скрывает несколько файлов и каталогов контейнера /proc
, монтируя что-то поверх него:
$ docker run ubuntu:bionic findmnt -R /proc
TARGET SOURCE FSTYPE OPTIONS
/proc proc proc rw,nosuid,nodev,noexec,relatime
|-/proc/bus proc[/bus] proc ro,relatime
|-/proc/fs proc[/fs] proc ro,relatime
|-/proc/irq proc[/irq] proc ro,relatime
|-/proc/sys proc[/sys] proc ro,relatime
|-/proc/sysrq-trigger proc[/sysrq-trigger]
| proc ro,relatime
|-/proc/asound tmpfs tmpfs ro,relatime
|-/proc/acpi tmpfs tmpfs ro,relatime
|-/proc/kcore tmpfs[/null] tmpfs rw,nosuid,size=65536k,mode=755
|-/proc/keys tmpfs[/null] tmpfs rw,nosuid,size=65536k,mode=755
|-/proc/timer_list tmpfs[/null] tmpfs rw,nosuid,size=65536k,mode=755
|-/proc/sched_debug tmpfs[/null] tmpfs rw,nosuid,size=65536k,mode=755
`-/proc/scsi tmpfs tmpfs ro,relatime
Как я могу отключить это поведение в Docker (в настоящее время используется версия 18.09)?
Мне нужен доступ к экземпляру proc
без монтирования поверх него, иначе вложенные контейнеры (например, с unshare
) завершатся ошибкой, потому что защита ядра активируется. Это можно увидеть с помощью следующей команды:
docker run -it --security-opt="seccomp=unconfined" --cap-drop=all ubuntu:bionic unshare --fork --user --pid --mount --mount-proc --setgroups deny --map-root-user --propagation unchanged /bin/bash
Это не работает с unshare: mount /proc failed: Permission denied
из-за монтирования сверху /proc
и будет работать, если Docker не создаст эти монтирования.
Я знаю, что --privileged
обеспечивает полный доступ к /proc
:
$ docker run --privileged ubuntu:bionic findmnt -R /proc
TARGET SOURCE FSTYPE OPTIONS
/proc proc proc rw,nosuid,nodev,noexec,relatime
Однако --privileged
дает контейнеру гораздо больше разрешений (возможностей, доступа к устройству и т. Д.), И я этого не хочу. Мне нужен только полный доступ к /proc
.
Также было бы хорошо, если бы в контейнере дважды монтировалась файловая система proc
, если у одного из монтирований нет перекрывающихся монтирований. К сожалению, при использовании --volume /proc:/proc2
монтируется хост /proc
в контейнере, и мне нужен контейнер /proc
. (Из-за этого этот вопрос не является дубликатом Docker - узел доступа /proc).
Сводка : Как получить полностью видимый /proc
экземпляр файловой системы контейнера proc
в контейнере Docker без использования --privileged
?