如何在 docker-compose.yml 文件中有条件地设置服务?

How can you conditionally set services in the docker-compose.yml file?

我刚开始使用 Docker 和 Cake。目前我们有一个简单的 Cake 任务,运行s DockerComposeUp() 方法采用 DockerComposeUpSettings 对象。 docker-compose.yaml 文件包含有关我想有条件地 运行 (serviceA):

的服务的一些信息
version: "1.0"  
services:  
    serviceA:  
        image: someImage  
        ports:
          -"000000"
          -"000001"
    serviceB:
        image: someOtherImage
        anotherProperty: somethingElse
        ports:
          -"111111"

我尝试将 serviceA 拆分成一个名为 'docker-compose.serviceA.yaml' 的单独 docker-compose 文件,并通过向 DockerComposeUpSettings.ArgumentCustomization 添加以下内容来调用它:

if(some setting)
{
    dockerComposeUpSettings.ArgumentCustomization = builder => builder.Append("-f docker-compose.yaml -f docker-compose.serviceA.yaml");
}

但是,Cake 抛出以下错误:

"unknown shorthand flag: 'f' in -f"

如何使用 Cake 合并到 docker-compose 文件作为 DockerComposeUp 方法的一部分?

更新

我发现 DockerComposeUpSettings 对象上有一个 'Files' 属性(继承自 DockerComposeSettings 对象),您可以在其中声明配置文件.所以我添加了:

if(some flag)
{
    dockerComposeSettings.Files = new[]{ "docker-compose.yaml", "docker-compose.serviceA.yaml" };
}

我不太了解 docker,但查看文档 here and here 似乎在指定的命令之前设置 -f 选项很重要命令行。您的自定义 (builder.Append()) 将它们放在命令行的末尾。

您是否尝试过设置 DockerComposeUpSettingsFiles 属性?这看起来就是您要找的东西。