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

时间:2016-04-11 15:57:48

标签: docker bind mount

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

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

我得到了

mount: permission denied

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

2 个答案:

答案 0 :(得分:20)

要使用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:/# 

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

答案 1 :(得分:1)

尝试使用--privileged标志:

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