如何在不让容器删除映射内容的情况下使用“ docker run -v”?

时间:2018-08-03 19:34:36

标签: linux docker dockerfile

$ docker run -it -v $PWD/path/to/data:/data myimg:latest

我知道-v选项是将外部文件夹映射到容器的方式。

但是,当我仅打算提供读取访问权限时,使用此选项可以使容器删除主机上的数据。如何约束呢?

2 个答案:

答案 0 :(得分:4)

您的观察是正确的;使用-v授予对卷的访问权限的容器将有权访问其中的文件。默认情况下,访问权限是读/写,并且实例可以删除数据文件。

最佳做法是不访问不需要的容器。因此,如果容器不需要访问卷以保留或与其他容器共享数据,则只需不映射该卷即可。

如果容器确实需要数据但不需要写入数据,则可以mount the volume as read only

$ docker run -d \
   --name=nginxtest \
   -v nginx-vol:/usr/share/nginx/html:ro \
   nginx:latest

答案 1 :(得分:0)

这绝不是安全“漏洞”(又是影响安全性的意外副作用)。尽管不鼓励绑定安装,但它是预期的行为。而且它根本不影响安全性。 “非故意” 递归和强制删除?您也可以在主机上执行此操作。

我的印象是,您将虚拟机和容器的概念混合在一起。虚拟机是在主机上运行的隔离操作系统。容器(理想情况下)是一个隔离的进程,该进程可能会或可能不会访问主机文件系统的某些相当有限的部分。当您将容器视为带来其依赖项和(主要是)预定义配置的软件包,并且软件包管理器能够限制所述过程使用的资源时,这与事实相去不远。