访问Docker容器中的完整/ proc

时间:2019-06-13 05:40:06

标签: linux docker

默认情况下,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 - Access host /proc的重复。)

摘要:如何在不使用/proc的情况下在Docker容器中获取容器的proc文件系统的完全可见的--privileged实例?

0 个答案:

没有答案