Dockerfile与docker-compose VOLUME

时间:2016-11-12 20:43:15

标签: docker docker-compose

此实验尝试使用此Docker文件构建容器:

FROM lambdalinux/baseimage-amzn:2016.09-000
COPY ./bundle /opt/bundle/
VOLUME /bundle

然后在容器内创建一个/opt/bundle/file.txt并在其中放入一些文本。但是在阅读Should I include my code with COPY/ADD or a volume最后一段后,该文件没有像我预期的那样显示在主机上的bundle目录中:

  

在某些情况下,您可能希望同时使用这两种方法。您可以使用COPY使映像包含代码,并使用Compose文件中的卷在开发期间包含来自主机的代码。卷会覆盖图像的目录内容。

没有Dockerfile VOLUME和docker-compose.yml VOLUME一样吗?如果是这样,如何做到这一点,以便在这种情况下主机目录中的更改反映在容器目录中?

我还在主机bundle/play.txt上创建了一个文件但是没有显示在容器/opt/bundle/...

1 个答案:

答案 0 :(得分:43)

dockerfile中的VOLUME instruction创建一个挂载点,但最初只将其映射到Docker的内部数据目录。

要将卷映射到主机文件系统,您需要指定主机上的哪个路径应映射到卷。您可以使用volumes parameter在docker-compose文件中执行此操作。 (注意:您可以使用docker-compose创建卷而不在Dockerfile中声明它们。)

请注意,将目录从主机映射到容器时,主机上的目录内容将替换容器中的内容,反之亦然。