如果卷容器中没有卷,volume_from会执行什么操作?

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

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

但是,这个答案是怎么回事? 在docker-compose.yml中没有提到卷。 那里有什么?

  volumes_from: - DatabaseData 

一个docker映像可以拥有自己的卷,这个卷在容器创build时没有定义(例如,使用docker run-v参数),但是当它创build的映像。 这就是Dockerfile中的VOLUME语句的用处。

另见文件的相关部分 :

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

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

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

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