【问题标题】:docker swarm compose placement constraints boolean or conditiondocker swarm 撰写放置约束布尔值或条件
【发布时间】:2018-06-14 13:41:51
【问题描述】:

是否可以在 docker composes 的放置约束中指定布尔值或条件? 我正在寻找可以模拟这种语法的东西:

services:
  service1:
    deploy:
      placement:
        constraints:
          - <condition1> || <condition2>

【问题讨论】:

    标签: docker docker-compose docker-swarm


    【解决方案1】:

    不,这是不可能的。你不能做你想做的事。

    【讨论】:

      【解决方案2】:

      我找过这个,但是1年6个月后,Swarm仍然不支持'or运算'。

      因此,当前的等效操作是将除条件之外的所有其他标签分组为“不等于”操作。

      如果你想要标签 == (1 | 2) 那么..

      constraints:
        - label != 3
        - label != 4
        ... 
        - label != n
      

      这看起来很糟糕,但目前是 swarm 中唯一可能的方式。

      【讨论】:

        【解决方案3】:

        您可以将条件指定为:

        version: '3.3'
        services:
          db:
            image: postgres
            deploy:
              placement:
                constraints:
                  - node.role == manager
                  - engine.labels.operatingsystem == ubuntu 14.04
        

        请参考https://docs.docker.com/engine/reference/commandline/service_create/#specify-service-constraints---constraint

        https://docs.docker.com/compose/compose-file/#mode

        【讨论】:

        • 这不是布尔 AND 吗?
        • 根据 docker 文档,“多个约束找到满足每个表达式的节点(AND 匹配)”。所以我认为是的。
        • 好吧,我正在寻找一个布尔或
        • 我没有找到任何东西,请您尝试使用单管道作为 (“none”|“on-failure”|“any”),因为 docker-compose 中还有其他设置将其作为: --restart-condition 满足条件时重启 ("none"|"on-failure"|"any") (默认为"any")
        • @LostNomad311 如果答案是您刚刚给出的评论,我可能不会投反对票。但就目前而言,这是非常具有误导性的。 (话虽如此,我不明白你的评论。你不能只是将所有 OR 重写为 AND。你想添加代表 ORed 条件的新标签?)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多