使用 docker-compose synthax v2,我们能够做这样的事情:
version: '2'
services:
app:
image: tianon/true
volumes:
- ../app:/var/www/app
nginx:
image: nginx
volumes_from:
- app
php:
image: php
volumes_from:
- app
在 v3.2 中,volumes_from 现在是 invalid option。该文档全部用于使用新的顶级卷合成器,这是 allways better。
我在github上看过一些评论,人们提出的唯一解决方案是
version: '3.2'
services:
nginx:
image: nginx
volumes:
- app:/var/www/app
php:
image: php
volumes:
- app:/var/www/app
volumes:
app:
driver_opts:
type: none
device: ../app
o: bind
这显然看起来更糟,甚至对我不起作用。它给了我一个错误:没有这样的文件或目录。那我还应该尝试什么?似乎我仍然可以使用 links 而不是顶级卷,但它被视为文档中的遗留选项。那么如何正确使用新语法呢?
编辑: 问题已被确定为可能重复,但我不同意。请参阅下面的评论以获取解释。
最佳答案
正如主题开始者已经提到的,根据 documentation,volumes_from 已从新的 docker-compose 语法中删除。支持在顶级键 volumes 中定义的命名卷。该文档还说明了 volumes 之间的区别。和 bind mounts ,其中之一是谁管理内容:
By contrast, when you use a volume, a new directory is created within Docker’s storage directory on the host machine, and Docker manages that directory’s contents.
如果是这种情况,那么将主机文件夹绑定(bind)到卷中并让它同时由主机的文件系统和 Docker 控制是没有意义的。
如果您仍想将同一个文件夹绑定(bind)到两个或多个容器中,您可以尝试以下操作:
version: '3.2'
services:
nginx:
image: nginx
volumes:
- type: bind
source: ../app
target: /var/www/app
php:
image: php
volumes:
- type: bind
source: ../app
target: /var/www/app
关于 docker 撰写 v3 : sharing bind-mounted volume between multiple containers with top-level volumes syntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44824761/