【问题标题】:Sharing data between docker containers without making data persistent在 docker 容器之间共享数据而不使数据持久化
【发布时间】:2021-02-26 12:36:47
【问题描述】:

假设我有一个包含两个容器的 docker-compose 文件:

version: "3"
services:
  app:
    image: someimage:fpm-alpine
    volumes:
      - myvolume:/var/www/html

  web:
    image: nginx:alpine
    volumes:
      - myvolume:/var/www/html

volumes:
  myvolume:

应用程序容器包含/var/www/html 目录中的应用程序代码,该目录会随映像的每个版本而更新,因此我不希望该目录持久存在。

但我需要与 nginx 容器共享数据。如果我使用卷或主机绑定,则数据是持久的并且不会使用新版本进行更新。也许有一种方法可以在我拉出新图像时自动删除卷?或者共享匿名卷的方法?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    我认为你最好使用匿名卷

    volumes:
      - ./:/var/www/html
    

    【讨论】:

      【解决方案2】:

      您必须愿意退回到 docker-compose 版本 2 并使用带有 volumes_from 指令的数据容器。

      这相当于docker run 命令上的--volumes-from

      【讨论】:

      • 是的,这是我最初的解决方案,但使用旧版本并不是一个好习惯,最终版本 2 将不再受支持。有什么方法可以实现版本 3 中的volumes_from 功能?
      • 使用 Compose 版本 2 实际上很好(有一些面向 Swarm 的版本 3 不支持的 docker run 配置)。但是volumes_from: 通常被认为是不好的做法(它将安装哪些 卷以及安装在哪里?),并且它具有与您最初引用的一般卷相同的问题(它们隐藏图像内容并且从不更新)。
      【解决方案3】:

      这应该可以正常工作。问题不在于码头工人。您可以使用卷以这种方式进行通信。如果您在具有以下撰写文件的目录中运行docker-compose up

      version: "3"
      services:
        one:
          image: ubuntu
          command: sleep 100000
          volumes:
            - vol:/vol
        two:
          image: ubuntu
          command: sleep 100000
          volumes:
            - vol:/vol
      volumes:
        vol:
      

      然后,在第二个终端 docker exec -it so_one_1 bash(您可能必须执行 docker ps 才能找到容器的确切名称,它可以更改)。您会发现自己处于 bash 容器中。切换到 /vol 目录 cd /vol 然后 echo "wobble" > wibble.txt", then exit` shell (ctrl-d)。

      然后您可以在同一终端中输入docker exec -it so_two_1 bash(再次检查名称)。就像上次你可以cd /vol 并输入ls -gAlFh 你会看到我们在另一个容器中创建的wibble.txt 文件。你甚至可以cat wibble.txt查看内容。它会在那里。

      如果问题不是 docker,那会是什么?我认为问题在于 nginx 没有看到文件系统上的更改。为此,我相信在配置中的位置块内设置expires -1; 实际上会完全禁用缓存并可能解决问题(仅限开发人员)。

      【讨论】:

      • 我的问题不是容器之间的数据共享,而是使其不持久。在您的示例中,假设一个新的 ubuntu 图像已经在 /vol 目录中有一些内容。我永远不会看到这些内容,因为它们会被卷中的内容覆盖。每当我拉取新版本的图像时,我都需要卷中的内容来更新图像中的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 2017-06-04
      • 2020-11-23
      • 2021-04-16
      • 1970-01-01
      相关资源
      最近更新 更多