在docker容器之间共享数据而不使数据持久化

在docker容器之间共享数据而不使数据持久化,docker,docker-compose,Docker,Docker Compose,假设我有一个docker compose文件,其中包含两个容器: 版本:3 服务: 应用程序: 图片:someimage:fpm alpine 卷数: -myvolume:/var/www/html 网状物: 图片:nginx:alpine 卷数: -myvolume:/var/www/html 卷数: myvolume: app容器在/var/www/html目录中包含应用程序代码,该目录随图像的每个版本而更新,因此我不希望此目录保持不变 但是我需要与nginx容器共享数据。如果使用卷或主机绑

假设我有一个docker compose文件,其中包含两个容器:

版本:3 服务: 应用程序: 图片:someimage:fpm alpine 卷数: -myvolume:/var/www/html 网状物: 图片:nginx:alpine 卷数: -myvolume:/var/www/html 卷数: myvolume: app容器在/var/www/html目录中包含应用程序代码,该目录随图像的每个版本而更新,因此我不希望此目录保持不变


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

您必须愿意返回docker compose版本2,并使用数据容器和volumes\u from指令


这相当于docker运行命令中的-卷。

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

版本:3 服务: 一: 图片:ubuntu 命令:睡眠100000 卷数: -音量:/vol 二: 图片:ubuntu 命令:睡眠100000 卷数: -音量:/vol 卷数: 卷: 然后,在第二个终端docker exec-it so_one_1 bash中,您可能需要执行docker ps来查找容器的确切名称,它可以更改。你会发现自己在一个bash容器中。切换到/vol目录cd/vol,然后echo-wobble>wibble.txt,然后退出` shell ctrl-d

在同一终端中,您可以再次键入docker exec-it so_two_1 bash,检查名称。就像上次您可以cd/vol并键入ls-gAlFh一样,您将看到我们在另一个容器中创建的wibble.txt文件。您甚至可以通过cat wibble.txt查看内容。它会在那儿的


那么,如果问题不是docker,那会是什么呢?我认为问题在于nginx没有看到文件系统上的变化。为此,我认为设置为-1;在配置中的位置块内部,实际上将完全禁用缓存,并且可能只解决开发人员的问题。

是的,这是我最初的解决方案,但使用旧版本并不是一个好做法,最终版本2将不再受支持。是否有任何方法可以实现版本3中的卷功能?使用Compose版本2实际上很好,有一些面向Swarm的版本3不支持的docker运行配置。但是volumes_from:通常被认为是不好的做法,它将装载哪些卷以及安装在何处?并且它与您最初引用的卷有相同的问题,通常它们隐藏图像内容并且从不更新。我的问题不是容器之间的数据共享,而是使其不持久。在您的示例中,假设一个新的ubuntu映像在/vol目录中已经有一些内容。我永远不会看到这些内容,因为它们会被卷中的内容覆盖。我需要在我的卷中的内容得到更新的内容从图像每当我拉一个新版本的图像。