Доступ к full / proc в контейнере Docker - PullRequest
0 голосов
/ 13 июня 2019

По умолчанию 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?

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