此实验尝试使用此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/...
答案 0 :(得分:43)
dockerfile中的VOLUME
instruction创建一个挂载点,但最初只将其映射到Docker的内部数据目录。
要将卷映射到主机文件系统,您需要指定主机上的哪个路径应映射到卷。您可以使用volumes
parameter在docker-compose文件中执行此操作。 (注意:您可以使用docker-compose创建卷而不在Dockerfile中声明它们。)
请注意,将目录从主机映射到容器时,主机上的目录内容将替换容器中的内容,反之亦然。