如何将 --bind 挂载到 Docker 容器中?

How do I mount --bind inside a Docker container?

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

mount --bind /htdocs/www /home/user/example.com/www

然后我得到

mount: permission denied

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

要使用mount系统调用,您需要CAP_SYS_ADMIN能力。默认情况下,Docker 在生成容器时会删除所有功能(这意味着即使是 root,你也不能做任何事情)。有关详细信息,请参阅 mount(2) man page

您可以使用 --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:/# 

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

尝试使用 --privileged 标志:

docker run --rm -it --privileged=true debian
mkdir /mnt/test
mount --bind /home /mnt/test/