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

Posted

技术标签:

【中文标题】像卷一样将绑定挂载添加到 Dockerfile【英文标题】:Add bind mount to Dockerfile just like volume 【发布时间】:2018-06-05 03:18:09 【问题描述】:

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

【问题讨论】:

【参考方案1】:

简单的答案是否定的。

docker 镜像的一个基本设计原则是可移植性。绑定挂载是特定于主机的,因为挂载的文件夹是在主机上定义的。因此,这与 Docker 映像的可移植性要求相矛盾。

【讨论】:

【参考方案2】:

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 运行它

【讨论】:

-d 不是必需的 卷如何应用于 Windows 机器 - 我是否使用 Windows 特定路径? (带有 linux 容器的窗口)【参考方案3】:

除了其他答案所说的:

由于绑定挂载提供对主机文件系统的访问,因此允许将它们嵌入到映像中会带来巨大的安全风险。考虑一个声称是 Web 服务器的图像,但实际上 bind 会挂载您的 /etc/passwd/etc/shadow,然后将它们发送到远程服务器。

或者绑定挂载/lib/ld-linux.so 然后覆盖它,从而破坏你的整个系统。

由于这些原因,您不能在 Dockerfile 中嵌入绑定挂载。同样,您不能在 Dockerfile 中指定主机端口映射、主机设备访问或任何其他类似属性。

【讨论】:

以上是关于像卷一样将绑定挂载添加到 Dockerfile的主要内容,如果未能解决你的问题,请参考以下文章

docker添加挂载目录或者添加端口

docker给已经启动容器添加挂载目录

Linux mount 命令进阶

Linux文件系统之目录绑定

Vue 添加评论,node作后台保存到MongoDB数据库中

windows10挂载webdav