像卷一样将绑定挂载添加到Dockerfile

时间:2017-12-22 13:02:49

标签: docker containers docker-volume

我想将bind mount添加到docker文件,就像我在Dockefile中初始化一个卷一样。 有什么办法吗?

3 个答案:

答案 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镜像的可移植性要求相矛盾。