使用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现在是无效选项.该文档仅用于使用新的顶级卷synthax,这是更好的方法.
我已经阅读了一些关于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
这显然看起来更糟,它甚至对我不起作用.它给了我一个错误:没有这样的文件或目录.那么我还应该尝试什么呢?看起来我仍然可以使用链接而不是顶级卷,但它被认为是文档中的遗留选项.那么如何使用新语法做到这一点?
编辑:
问题已被确定为可能重复,但我不同意.请参阅我的评论以获得解释.
最佳答案
正如主题启动者已经提到的那样,volume_from已从新的docker-compose语法中删除,根据documentation支持在顶级密钥卷中定义的命名卷.文档还说明了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.
如果是这种情况,那么将主机文件夹挂载到卷中并让它由主机的文件系统和Docker同时控制是没有意义的.
如果您仍想将相同的文件夹绑定到两个或更多容器中,您可以尝试以下方法:
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