在docker-compose中,是否可以在服务之间重用卷配置?

时间:2019-06-26 01:34:16

标签: docker docker-compose yaml

我正在尝试使用类似于以下内容的设置:

version: '3.4'
x-my-volumes: &volumes
    - '../src:/var/www/src/:cached'
    - '../static:/var/www/static/:cached'
services:
  webserver:
    build: ./.docker/webserver
    volumes:
      - *volumes
      - './serverlogs/:/var/www/serverlogs/:delegated'
  node:
    build: ./.docker/node
    volumes:
      - *volumes

我在x-my-volumes节中设置了“共享”卷,并为其添加了“卷”的锚点,我试图将其用于服务中。不过,最主要的是,这些服务除了共享的服务外还具有其他卷安装。这不起作用,执行contains an invalid type, it should be an array时会出现诸如“ docker-compose up”之类的错误。

这可能适用于docker-compose吗?我意识到我可以在我的真实场景中为每个服务复制并粘贴其10多个服务和10多个卷的卷挂载,所以这是很多丑陋的重复。

1 个答案:

答案 0 :(得分:0)

如果服务之间的卷阵列完全相同,则可以执行以下操作:

version: '3.4'

services:
  webserver:
    volumes: &volumes
      - one:one
      - two:two

  node:
    volumes: *volumes

如果您希望扩展数组并在某些服务中向其中添加元素,则this GitHub issuethis StackOverflow question所指示的YAML中似乎不支持此方法。


也许可以为您提供另一种考虑的方法(尽管我不确定这对您的用例是否会有帮助):

在我的许多docker compose中,我定义了一个“基本”服务,然后可以通过使用YAML合并来由其他服务继承该服务的某些属性。考虑以下示例:

version: '3'

services:
  bash:
    build: .
    entrypoint: /bin/bash
    <<: &default
      image: dannyben/borg-client
      volumes:
        - one:one
        - two:two

  init:
    <<: *default
    command: init -e repokey-blake2

  backup:
    <<: *default
    command: create --stats --progress ::initial-backup /borg/source

使用这种方法,我可以使复杂的docker-compose文件以非常易读的方式表达。