VOLUME

VOLUME ["/data"]

VOLUME指令通过一个指定的名称创建一个挂载点,然后将它标记为持有一个来自本地主机或其他容器的外部挂载卷。它的值可以是一个JSON数组VOLUME["/var/log/"],或者是有多个参数的纯字符串,例如VOLUME /var/logVOLUME /var/log /var/db。对于更多的信息或示例以及Docker client的挂载指令,参考通过卷共享目录

docker run命令将对基础镜像中的指定位置已经存在的最新创建的卷用数据进行初始化。例如,请考虑以下Dockerfile片段:

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

上面的Dockerfile会让docker run/myvol处创建一个新的挂载点,并将新创建的greeting文件复制到新创建的卷中。

关于指定卷的注意点:

关于Dockerfile中的卷需要记住以下几件事情:

  • 基于windows容器的卷:当使用基于windows的容器时,容器内部一个卷的目的地必须符合下面两种情况中的一个:

    • 一个不存在的或空的目录

    • 除了C:以外的驱动器

  • Dockerfile内部更改卷:如果构建步骤在数据被声明后又更改了卷内的数据,则这些更改将被丢弃。

  • JSON格式:列表会被解析为一个JSON数组,因此必须用双引号包围单词而不是单引号

  • 在容器的运行时声明主机目录:主机目录(挂载点)本质上是主机依赖的。这是为了保持镜像的便携性,因为无法保证提供的一个主机目录在所有主机上都是可用的。因此,我们无法从Dockerfile中挂载主机目录。VOLUME指令不支持指定host-dir参数。当我们创建或运行容器时,必须指定挂载点。

Last updated