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

标签 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 任何一对子树/节点容器内。

最佳答案

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

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

关于docker - 如何在 Docker 容器中挂载 --bind?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36553617/

相关文章:

C++绑定(bind)问题

amazon-web-services - AWS : Mounting a template disk with Batch/ECS

amazon-ec2 - 重启 EC2 实例后,Scylla 无法挂载 RAID 卷

docker - Keycloak 无法导入在 docker 中运行的导出领域

node.js - 错误 : EACCESS: permission denied, 打开 'build/FILENAME.js'

docker - 多个 GPU 是否可以作为一个具有更多内存的 GPU 一起工作?

kubernetes - 检查 kubernetes 中是否启用/禁用功能门

docker - 在具有共享文件系统的计算集群上安装 docker

Cassandra DB - 绑定(bind)变量

javascript - 即使绑定(bind)后,this.setState 也不会设置状态 `this`