首页 > 解决方案 > Docker:使用多个 YAML 文件时删除设置

问题描述

使用 Docker Swarm,我将所有“覆盖”保存在一个yml文件中,如下所示:

docker stack -c base.yml -c overrides.yml deploy myStack

如果我的base.yml文件定义了以下部署限制serviceA

serviceA:
  . . .
  deploy:
    resources:
      limits: {memory: 1024M}
      reservations: {memory: 1024M}

我可以轻松地覆盖overrides.yml

serviceA:
  deploy:
    resources:
      limits: {memory: 2048M}
      reservations: {memory: 2048M}

这样,我base.yml可以随着产品新版本的发布而改变,但任何覆盖都可以轻松地从旧版本传输到新版本。但是,如果我想删除或删除中定义的内容base.yml怎么办?如果我想保留, 但使用第二个文件reservation删除定义。有没有办法做到这一点?目前,我使用的是 yaml 版本 3.6。limitsyml

这两个选项不起作用。这(不可解析):

serviceA:
  deploy:
    resources:
      limits: {memory: }
      reservations: {memory: 2048M}

这(使用定义的默认值base.yml):

serviceA:
  deploy:
    resources:
      reservations: {memory: 2048M}

标签: dockerdocker-swarm

解决方案


当使用多个 docker-compose 文件时,后者会合并到前者中。这意味着:您不能删除定义,只能修改现有定义或添加新定义(请参阅https://github.com/docker/compose/issues/3729)。允许的PR被创建和关闭,但从未被合并。

所以剩下的就是limits从你的定义中删除base.yml它,并且只在你的overrides.yml.


推荐阅读