如何装载--绑定到Docker容器中?
我有一个基于如何装载--绑定到Docker容器中?,docker,bind,mount,Docker,Bind,Mount,我有一个基于debian:jessie的容器(但这与alpine:3.3的问题不太相关)。我到了我需要的地步 mount --bind /htdocs/www /home/user/example.com/www 我得到 mount: permission denied 我在任何内核日志中都找不到任何东西,-vvv不会产生任何有趣的结果。很明显,我可以在主机上(使用任何其他对子树/节点)执行此操作。在我上面的例子中,/htdocs/www是Docker卷的挂载点,但它看起来并不重要,因为我不
debian:jessie
的容器(但这与alpine:3.3
的问题不太相关)。我到了我需要的地步
mount --bind /htdocs/www /home/user/example.com/www
我得到
mount: permission denied
我在任何内核日志中都找不到任何东西,
-vvv
不会产生任何有趣的结果。很明显,我可以在主机上(使用任何其他对子树/节点)执行此操作。在我上面的例子中,/htdocs/www是Docker卷的挂载点,但它看起来并不重要,因为我不能mount——绑定容器中的任何一对子树/节点。要使用mount
系统调用,您需要CAP\u SYS\u ADMIN
功能。默认情况下,Docker在生成容器时会删除所有功能(这意味着即使作为root用户,也不允许您做任何事情)。有关更多信息,请参阅
您可以使用--cap add=SYS\u 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/
是否有理由从容器内部安装?使用-v/home/user/example.com/www:/htdocs/www
运行容器可能是一个更好的解决方案,因为它对这些文件来自的容器是透明的,并且不需要为容器提供额外的特权。但是,这迫使我在每次向现有用户添加新用户和/或其他站点时重新创建容器。我希望能够在一个正在运行的容器上执行此操作,而不必中断它;旋转容器大约需要300毫秒。在一个容器中只有一个站点,这也使得它更干净;你只需要那个站点所需要的,并且(例如)你不需要担心可能发生冲突(site-a,site-b)。我从来没有说过我要把多个站点放在一个容器中。事实上,每个子域都有自己的apache/php容器。我在这里做的是拥有一个sftp服务器容器。不幸的是,我无法使用ssh/ftp进行基于主机名的代理,因此必须这样做:一个容器、多个用户、装载绑定和/或符号链接(取决于chroot状态)。我可以说这个问题与这个问题相关,而这个问题又与另一个问题相关。啊,对了,谢谢你解释我保证我会非常小心:)谢谢。我得到:/\mount--bind/home/mnt/test/mount:/home是写保护的,挂载只读挂载:无法挂载/home只读
这改变了错误将“权限被拒绝”改为“失败”。即使添加所有功能也会失败。根据Javier的回答,使用privileged=true也有效。