docker-compose 可以直接引用其他 docker-compose 文件并启动其中的所有内容吗?

end*_*and 6 docker docker-compose

我有一些 docker-compose 文件,例如:

#docker-compose.yml
version: '2'
services:
  my_other_service:
    image: alpine
    command: ping -c3 google.com
  my_base_service_reference:
    extends:
      file: base-docker-compose.yml
      service: base_service

#base-docker-compose.yml
version: '2'
services:
  base_service:
    image: alpine
    command: ping -c5 google.com
Run Code Online (Sandbox Code Playgroud)

我可以运行这两个服务,docker-compose up因为我引用了第二个文件。但我真正想做的是让我的单个 docker-compose 文件像这样工作:

#docker-compose.yml
version: '2'
services:
  my_other_service:
    image: alpine
    command: ping -c3 google.com
#base-docker-compose.yml
version: '2'
services:
  base_service:
    image: alpine
    command: ping -c5 google.com

$ docker-compose -f base-docker-compose.yml up &
$ docker-compose -f docker-compose.yml up &
Run Code Online (Sandbox Code Playgroud)

有没有办法以这种方式构建我的 docker-compose.yml 以获得类似的功能?

实际上,我有不止两个简单的示例,最好避免启动每个单独的服务,并且它需要单独的依赖项,而是类似:

#docker-compose.yml
version: '2'
services:
  my_other_service:
    image: alpine
    command: ping -c3 google.com

other_docker_compose_files: 
  - base-docker-compose.yml
  - other-docker-compose.yml
  - another-docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

我可以在其中运行docker-compose -f docker-compose.yml up并执行相当于单独启动每个文件的操作。

Den*_*oef 0

即使过了 5 年,docker-compose 也没有能力做这样的事情或docker-compose up -f docker-compose*.yml.

我建议所有人使用yq,并使用它将所有 yaml 文件合并为一个。

我使用这样的脚本,第一行只是为了确保没有剩余并且可以删除。

运行_all.sh

rm docker-compose-combined.yml
yq ea '. as $item ireduce ({}; . * $item )' docker-compose*.yml > docker-compose-combined.yml
docker-compose -f docker-compose-combined.yml up
rm docker-compose-combined.yml
Run Code Online (Sandbox Code Playgroud)