Dockerfile与docker-compose VOLUME

Fre*_* J. 35 docker docker-compose

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

FROM lambdalinux/baseimage-amzn:2016.09-000
COPY ./bundle /opt/bundle/
VOLUME /bundle
Run Code Online (Sandbox Code Playgroud)

然后在容器内创建一个/opt/bundle/file.txt并在其中放入一些文本.但是这个文件没有显示在主机上的bundle目录中,正如我在阅读后所预期的那样我是否应该将我的代码包含在COPY/ADD或最后一段的卷中:

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

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

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

aug*_*rar 52

一个VOLUME指令在dockerfile创建了一个挂载点,但最初只将其映射到多克的内部数据目录.

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

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

  • @velop是的,你可以.事实上,在某些情况下可能更为可取 - 请参阅[本文](https://boxboat.com/2017/01/23/volumes-and-dockerfiles-dont-mix/). (12认同)
  • 当我仅使用compose.yml卷定义时,是否可以省去dockerfile卷声明? (2认同)
  • 首先将体积声明放入dockerfile的原因是什么? (2认同)
  • @Gherman 因为 Dockerfile 早于 docker-compose.yml 并且可以在没有 docker-compose 的情况下使用。 (2认同)