Docker: 使用多个 YAML 文件时删除设置
Docker: remove a setting when using multiple YAML files
使用 Docker Swarm,我将所有 "overrides" 保存在一个 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
,但使用第二个 yml
文件删除 limits
定义。有什么办法吗?目前,我使用的是 yaml 版本 3.6。
这两个选项不起作用。这(不可解析):
serviceA:
deploy:
resources:
limits: {memory: }
reservations: {memory: 2048M}
和这个(使用 base.yml
中定义的默认值):
serviceA:
deploy:
resources:
reservations: {memory: 2048M}
当使用多个 docker-compose 文件时,后面的文件会合并到前面的文件中。这意味着:您不能删除定义,只能修改现有定义或添加新定义(请参阅 https://github.com/docker/compose/issues/3729). A PR 以允许在不合并的情况下创建和关闭定义。
因此,剩下的就是从 base.yml
中删除 limits
定义,仅将其包含在 overrides.yml
.
中
fjc 为我的问题提供了实际答案。对于我感兴趣的特定情况,我了解到如果您 'override' 并将内存限制设置为零 (0),则相当于根本没有设置它。不是一般的解决方法,但至少是针对此特定案例的解决方法。例如:
serviceA:
deploy:
resources:
limits: { cpus: '0', memory: '0' }
实际上不会限制 CPU 或内存的数量。
使用 Docker Swarm,我将所有 "overrides" 保存在一个 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
,但使用第二个 yml
文件删除 limits
定义。有什么办法吗?目前,我使用的是 yaml 版本 3.6。
这两个选项不起作用。这(不可解析):
serviceA:
deploy:
resources:
limits: {memory: }
reservations: {memory: 2048M}
和这个(使用 base.yml
中定义的默认值):
serviceA:
deploy:
resources:
reservations: {memory: 2048M}
当使用多个 docker-compose 文件时,后面的文件会合并到前面的文件中。这意味着:您不能删除定义,只能修改现有定义或添加新定义(请参阅 https://github.com/docker/compose/issues/3729). A PR 以允许在不合并的情况下创建和关闭定义。
因此,剩下的就是从 base.yml
中删除 limits
定义,仅将其包含在 overrides.yml
.
fjc 为我的问题提供了实际答案。对于我感兴趣的特定情况,我了解到如果您 'override' 并将内存限制设置为零 (0),则相当于根本没有设置它。不是一般的解决方法,但至少是针对此特定案例的解决方法。例如:
serviceA:
deploy:
resources:
limits: { cpus: '0', memory: '0' }
实际上不会限制 CPU 或内存的数量。