如何在Dockerfile中指定VOLUME的源和目标?

时间:2017-11-24 17:42:32

标签: docker docker-compose dockerfile docker-volume

我想在VOLUME中安装Dockerfile,同时指定来源(主机)和目的地(容器)路径。

此操作可以通过docker-compose.yml以这种方式完成:

volumes:
  - /path/source/on/host:/path/destination/on/container

如何使用Dockerfile执行相同的操作?

3 个答案:

答案 0 :(得分:1)

您无法在指定源(主机)和目标(容器)路径的Dockerfile中安装VOLUME。

这是因为这个想法不适合Docker镜像可移植且独立于主机的基本概念。

答案 1 :(得分:0)

您可以使用的是参数

-v /path/source/on/host:/path/destination/on/container

运行容器时。

对于正在运行的容器,第一步是提交容器

docker commit <id> new container_name

第二

docker run -v /path/source/on/host:/path/destination/on/container container_name

答案 2 :(得分:0)

来自文档

docker run命令使用基础映像内指定位置上存在的任何数据初始化新创建的卷。例如,考虑以下Dockerfile片段:

FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol

此Dockerfile生成一个映像,该映像使docker run在/ myvol处创建一个新的挂载点并将问候文件复制到新创建的卷中。

请记住一些要点

Docker卷在创建时(如果与docker volume create隔离创建)可能不会保存任何数据,但是它们的“种子”数据最初来自具有对该卷的写访问权的容器,该容器将其复制为{从{1}}到destination的挂载时间。

配置属性名称sourcesource对于绑定安装总是有意义的,在主机上已经存在一个主机位置,该位置在创建时已被复制并注入到容器中,但是仅初始数据播种发生后,卷变得直观(例如,如果将现有卷安装在具有只读访问权限的容器上)。

由于Docker管理着卷的位置(因此,在Mac上,它们的位置位于运行Docker的Linux虚拟机中-您无法通过浏览Mac HD找到它们),并认为它们主要用于保持应用程序状态,在Dockerfile中使用它们有很多限制,例如在Windows中,如果任何构建步骤在声明了卷后更改了卷中的数据,这些更改将被丢弃。

您可以从现有容器(即安装在其上的容器)中备份,还原和迁移数据卷。有关更多信息,请参见下面的文档。

进一步阅读

卷的一般介绍: https://docs.docker.com/storage/volumes/

如何在Dockerfile中指定卷: https://docs.docker.com/engine/reference/builder/#volume

如何在compose.yaml文件中指定卷: https://docs.docker.com/compose/compose-file/#volumes