【问题标题】:Mount Docker volume as non-persistent storage将 Docker 卷挂载为非持久存储
【发布时间】:2021-12-20 20:55:57
【问题描述】:

对于集成测试,我创建了一个包含数据库的 Docker 卷。

  • 用例 1:我想从完全相同的状态开始一遍又一遍地使用同一个数据库,并且我还想与其他开发人员共享它。
  • 用例 2:有时,我想修改卷以包含其他测试的数据。

当我挂载卷时,对数据库的所有写操作都会修改卷,这是我要避免的。我知道可以将卷安装为只读,但这也不起作用,因为在测试期间数据库也是只读的

我想要实现的是挂载具有写访问权限的卷,但没有在容器关闭后保持其状态。就像体积数据包含在图像本身一样。

我曾想过这样做 - 包括图像本身中的数据库 - 但在这种情况下,我的第二个用例(不时修改数据库以支持其他测试)似乎要复杂得多(从容器,在 docker 之外对其进行修改,然后使用该数据创建一个新图像。

谁能告诉我解决该问题的推荐方法?

【问题讨论】:

    标签: docker docker-volume


    【解决方案1】:

    您可以使用tmpfs 挂载。

    docker run -d \
      -it \
      --name tmptest \
      --tmpfs /app \
      nginx:latest
    

    与卷和绑定挂载相反,tmpfs 挂载是临时的,并且只保留在主机内存中。当容器停止时,tmpfs 挂载被移除,写入那里的文件不会被持久化。

    更多信息here

    注意:它仅适用于 Linux 主机。

    【讨论】:

    • 你能详细说明一下吗?假设我在路径“/data/db”中包含了我的数据库卷。如何使用 tmpfs 使该目录非持久化?如果我尝试将 tmpfs 也安装在“/data/db”上,我会收到一条错误消息,告诉我不能将同一点安装两次。
    【解决方案2】:

    看起来像是overlayfs的一个用例;每个容器都有自己的可写层,同时保持基础完好无损。从此 stackoverflow 中查看更多信息thread

    【讨论】:

    • 接受的答案告诉我“overlay-upperdir-on-overlay”已被弃用?
    • 已禁用,未弃用。单击the link 并进一步阅读解决方法。
    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2013-10-10
    • 2018-06-10
    • 2020-01-20
    相关资源
    最近更新 更多