docker-compose v3:使用顶级卷语法在多个容器之间共享装入装入的卷

时间:2017-06-29 12:10:16

标签: docker docker-compose docker-volume

使用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。该文档仅用于使用新的顶级卷synthax,即all the ways 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

显然看起来更糟糕,它甚至对我不起作用。它给了我一个错误:no such file or directory。那么我还应该尝试什么呢?我似乎仍然可以使用links而不是顶级卷,但它被视为文档中的遗留选项。那么如何使用新语法做到这一点?

修改 问题已被确定为可能重复,但我不同意。请参阅我的评论以获得解释。

1 个答案:

答案 0 :(得分:2)

正如主题启动者已经提到的那样,volumes_from已从新的docker-compose语法中移除,根据documentation支持在顶级键{{1中定义的命名卷}}。文档还说明了volumesbind mounts之间的区别,其中一个是管理内容的人:

  

相比之下,当您使用卷时,会在主机上的Docker存储目录中创建一个新目录,Docker会管理该目录的内容。

如果是这种情况,那么将主机文件夹挂载到卷中并让它由主机的文件系统和Docker同时控制是没有意义的。

如果您仍想将相同的文件夹绑定到两个或更多容器中,您可以尝试以下方法:

volumes