【问题标题】:docker-compose down deletes volume declared on dockerfile?docker-compose down 删除 dockerfile 上声明的卷?
【发布时间】:2017-08-17 19:15:44
【问题描述】:

我正在追踪我这周看到的两起事件,在重新创建容器后数据丢失,不用担心,数据已恢复 =)

为了清楚起见,我知道文档所说的内容以及 compose 附带的选项。我四处搜索,有些人确实询问了相关问题,但他们通常是关于 -v 选项或者数据是否在容器 RW 层与卷之间。

但是,我对文档中的语言更好奇:

-v, --volumes       Remove named volumes **declared in the `volumes` section**
                    of the Compose file and anonymous volumes
                    attached to containers.

更具体地说,当卷在 Dockerfile 中声明时,我正在搜索预期的、记录在案的 down 指令行为,而不是在 docker-compose 文件的卷部分中。

同一主题的相关问题示例,在一个案例中:Docker-Compose persistent data MySQL 这个问题也令人困惑,因为 OP 确实在卷部分中声明了卷。

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    在 Dockerfile 中声明的卷是“匿名卷”,因此将被删除。

    请参阅此示例:https://gist.github.com/dnephin/0aa8e8962ebcdcebff1cec7315a224dd

    【讨论】:

    • 文档中提到的“匿名卷”是 docker-compose 文件中服务的volumes: 部分中的那些
    • 我不知道为什么要投反对票,尤其是因为这是我以前的想法。但这不是我观察到的:我的意思是,问题是它被删除的原因,即使没有设置选项。
    • @MatTheWhale 如果您查看代码github.com/docker/compose/blob/1.15.0/compose/project.py#L314,您会看到它确实将v=True 传递给了容器remove,它应该会删除匿名卷。我也刚刚试了一下,它确实删除了音量:gist.github.com/dnephin/0aa8e8962ebcdcebff1cec7315a224dd
    • 很好,我会检查这段代码。但仍然不是我正在搜索的内容。但可能有答案。
    【解决方案2】:

    我刚刚测试过。在 Dockerfile 中声明卷时,docker-compose downdocker-compose down -v 都没有删除卷。

    docker-compose down 后跟 docker volume prune 确实会删除它。

    【讨论】:

    • docker-compose down & docker volume prune 肯定.. 但它很麻烦。你有没有看到我提出的相关问题。我也能够复制它。只有使用命名和绑定的卷,数据似乎才是真正持久的。尤其是图像升级..我想知道它是否仅限于升级,或者它是否与系统相关的设置或配置。 (在 compose 3.2,debian 上测试)
    • docker volume prune 将删除所有未被正在运行的容器引用的卷,因此这可能过于激进。 docker-compose down -v 是删除它们的正确方法。
    • 这是不正确的,docker volume prune 只删除悬空卷。只要卷被容器引用,它就不会被删除,无论容器是否正在运行。 docker-compose down -v 用于删除在 docker-compose.yml 中声明的匿名卷,否则如果使用 docker-compose down 代替,匿名卷将持续存在
    • 到目前为止:我根据实验得出的结论是:组合文件中全局卷区域中的命名卷是安全的,绑定的卷也是安全的(当然)。但是,在服务卷区域内,当使用匿名卷时,无论是否使用 -v - 如果使用 docker-compose down,它都可能会丢失。我的测试从 mysql 官方镜像开始,还有其他 3 个服务。在这个mysql图像的情况下,行为是,就像在OP的问题中一样->我用作示例的那个。
    • 如果您先运行docker-compose down(不带-v),那么是的,您将失去匿名卷的链接,因此在此之后尝试运行docker-compose down -v,不再有任何引用匿名卷,您将无法删除它。如果您第一次使用-v,它将删除它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2018-01-12
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    相关资源
    最近更新 更多