如何在Docker容器中挂载-bind?

Mor*_*eu5 11 mount bind docker

我有这个容器基于debian:jessie(但这不是很相关,因为我有同样的问题alpine:3.3).我达到了我需要的地步

mount --bind /htdocs/www /home/user/example.com/www
Run Code Online (Sandbox Code Playgroud)

我明白了

mount: permission denied
Run Code Online (Sandbox Code Playgroud)

我在任何内核日志中都找不到任何东西,并且-vvv没有任何有趣的东西.我显然可以在主机上执行此操作(使用任何其他子树/节点对).在上面的示例中,/ htdocs/www是Docker卷的挂载点,但它看起来并不重要,因为我不能mount --bind在容器内部任何子树/节点对.

hel*_*ert 23

要使用mount系统调用,您需要该CAP_SYS_ADMIN功能.默认情况下,Docker在生成容器时会丢弃所有功能(这意味着即使是root用户,也不允许您执行所有操作).有关更多信息,请参见mount(2)手册页.

您可以使用--cap-add=SYS_ADMIN标志启动容器,以将此功能添加到容器中:

root@host > docker run --rm -it --cap-add=SYS_ADMIN debian:jessie
root@ee0b1d5fe546:/# mkdir /mnt/test
root@ee0b1d5fe546:/# mount --bind /home /mnt/test/
root@ee0b1d5fe546:/# 
Run Code Online (Sandbox Code Playgroud)

请谨慎使用.不要在特权容器中运行不受信任的软件.

  • 我保证我会非常小心:)谢谢. (5认同)

Jav*_*ier 5

尝试使用--privileged标志:

docker run --rm -it --privileged=true debian
mkdir /mnt/test
mount --bind /home /mnt/test/
Run Code Online (Sandbox Code Playgroud)