我想把绑定挂载添加到Docker文件中,就像我在Dockefile中初始化一个卷一样。有什么办法吗?
s5a0g9ez1#
Dockerfile定义了如何构建映像,而不是如何使用映像,因此您不能在Dockerfile中指定绑定挂载。请尝试使用docker-compose。一个简单的docker-compose.yml为您挂载目录,如下所示:
docker-compose.yml
version: '3.1' services: mycontainer: image: myimage build: . volumes: - './path/on/docker/host:/path/inside/container'
如果您通过其他方法构建映像,则build: .是可选的,但有时在一种方法中完成所有操作会很方便。使用docker-compose up -d运行此命令
build: .
docker-compose up -d
mf98qq942#
除了其他答案所说的:因为绑定挂载提供了对主机文件系统的访问,允许它们嵌入到一个镜像中将是一个巨大的安全风险。假设一个镜像声称是一个web服务器,但实际上绑定挂载了你的/etc/passwd和/etc/shadow,然后将它们发送到一个远程服务器。或者绑定挂载/lib/ld-linux.so,然后覆盖它,从而破坏整个系统。由于这些原因,您不能在Dockerfile中嵌入绑定挂载。同样,您不能在Dockerfile中指定主机端口Map、主机设备访问或任何其他类似属性。
/etc/passwd
/etc/shadow
/lib/ld-linux.so
ymdaylpp3#
简单的回答是不。Docker映像的基本设计原则是可移植性。绑定挂载是特定于主机的,因为挂载的文件夹是在主机上定义的。因此,这与Docker映像的可移植性要求相矛盾。
3条答案
按热度按时间s5a0g9ez1#
Dockerfile定义了如何构建映像,而不是如何使用映像,因此您不能在Dockerfile中指定绑定挂载。请尝试使用docker-compose。一个简单的
docker-compose.yml
为您挂载目录,如下所示:如果您通过其他方法构建映像,则
build: .
是可选的,但有时在一种方法中完成所有操作会很方便。使用
docker-compose up -d
运行此命令mf98qq942#
除了其他答案所说的:
因为绑定挂载提供了对主机文件系统的访问,允许它们嵌入到一个镜像中将是一个巨大的安全风险。假设一个镜像声称是一个web服务器,但实际上绑定挂载了你的
/etc/passwd
和/etc/shadow
,然后将它们发送到一个远程服务器。或者绑定挂载
/lib/ld-linux.so
,然后覆盖它,从而破坏整个系统。由于这些原因,您不能在Dockerfile中嵌入绑定挂载。同样,您不能在Dockerfile中指定主机端口Map、主机设备访问或任何其他类似属性。
ymdaylpp3#
简单的回答是不。
Docker映像的基本设计原则是可移植性。绑定挂载是特定于主机的,因为挂载的文件夹是在主机上定义的。因此,这与Docker映像的可移植性要求相矛盾。