如果卷容器中没有卷,volume_from会怎么做?

时间:2015-12-21 18:31:27

标签: docker docker-compose

我正在看这个答案https://stackoverflow.com/a/32916890/271388而我并不完全明白那里发生了什么。

如果我理解正确,在docker卷中是从主机文件系统到容器文件系统的映射。而docker的--volumes-from flag以及docker-compose.yml中的docker-compose的volumes_from指令将这些映射从一个容器复制到另一个容器。

但那回答是怎么回事? docker-compose.yml中没有提到任何卷。以下是什么?

  volumes_from:
    - DatabaseData

1 个答案:

答案 0 :(得分:1)

docker镜像可以拥有自己的卷,这些卷在创建容器时未定义(例如,使用-v参数docker run),但是当构建的图像。这就是Dockerfile中VOLUME语句的用途。

另请参阅relevant section of the documentation

  

VOLUME指令创建具有指定名称的安装点,并将其标记为从本机主机或其他容器保存外部安装的卷。该值可以是JSON数组VOLUME ["/var/log/"],也可以是包含多个参数的纯字符串,例如VOLUME /var/logVOLUME /var/log /var/db。有关通过Docker客户端提供的更多信息/示例和安装说明,请参阅通过卷文档共享目录。

     

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

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

如果您查看了问题中(间接)引用的Dockerfile of the mysql image,您会看到/var/lib/mysql被定义为卷。即使未明确定义,也将使用该卷创建从该图像创建的每个容器。