我想将bind mount添加到docker文件,就像我在Dockefile中初始化一个卷一样。 有什么办法吗?
答案 0 :(得分:15)
Dockerfile定义了如何构建映像,而不是如何使用它 - 因此您无法在Dockerfile中指定绑定装载。请尝试使用docker-compose。为您安装目录的简单docker-compose.yml
如下所示:
version: '3.1'
services:
mycontainer:
image: myimage
build: .
volumes:
- './path/on/docker/host:/path/inside/container'
build: .
是可选的,如果您通过其他方式构建图像,但有时一次性完成这一操作非常方便。
使用docker-compose up -d
答案 1 :(得分:6)
除了其他答案所说的:
因为绑定挂载提供对主机文件系统的访问,允许将它们嵌入到映像中将是一个巨大的安全风险。考虑一个声称是Web服务器的图像,但实际上绑定会挂载您的$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
var term = $('.dataTables_filter input').val();
if (~data[2].toLowerCase().indexOf(term)) return true;
if (~data[3].toLowerCase().indexOf(term)) return true;
return false;
})
和/etc/passwd
,然后将它们发送到远程服务器。
或者绑定挂载/etc/shadow
然后覆盖它,从而破坏整个系统。
由于这些原因,您无法在Dockerfile中嵌入绑定装载。同样,您无法在Dockerfile中指定主机端口映射,主机设备访问或任何其他类似属性。
答案 2 :(得分:1)
简单的答案是否定的。
码头图像的基本设计原则是可移植性。绑定装载是特定于主机的,因为装入的文件夹是在主机上定义的。因此,这与Docker镜像的可移植性要求相矛盾。