【问题标题】:Dockerfile vs. docker-compose VOLUMEDockerfile 与 docker-compose VOLUME
【发布时间】:2016-11-12 20:43:15
【问题描述】:

本实验尝试使用此 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最后一段之后,该文件并没有像我预期的那样显示在主机的捆绑目录中:

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

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

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

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

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

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

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

    【讨论】:

    • 当我只使用 compose.yml 卷定义时,我可以省去 dockerfile 卷声明吗?
    • @velop 是的,你可以。事实上,在某些情况下它可能更可取——参见this article
    • 首先将卷声明放在dockerfile中的原因是什么?
    • @Gherman 因为 Dockerfile 早于 docker-compose.yml 并且可以在没有 docker-compose 的情况下使用。
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2020-09-02
    • 2021-08-21
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多