Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何装载--绑定到Docker容器中?_Docker_Bind_Mount - Fatal编程技术网

如何装载--绑定到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也有效。