我正在尝试使用类似于以下内容的设置:
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多个卷的卷挂载,所以这是很多丑陋的重复。
答案 0 :(得分:0)
如果服务之间的卷阵列完全相同,则可以执行以下操作:
version: '3.4'
services:
webserver:
volumes: &volumes
- one:one
- two:two
node:
volumes: *volumes
如果您希望扩展数组并在某些服务中向其中添加元素,则this GitHub issue和this 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文件以非常易读的方式表达。