【问题标题】:While inside a docker swarm container, how do i determine which replica number a container is?在 docker swarm 容器中,如何确定容器的副本号?
【发布时间】:2021-10-07 05:47:44
【问题描述】:

鉴于我有一个名为 Whale 的 docker swarm 服务,其副本数为 10

容器启动时

运行时程序如何确定它是哪个副本号?

IE:“我是鲸鱼复制品 3 of 10”

【问题讨论】:

    标签: docker docker-swarm docker-container swarm


    【解决方案1】:

    最简单的方法是通过环境变量告诉它,并使用docker service create支持的模板参数。

    compose 语法如下所示。

    services:
      replicated-service:
        environment:
          REPLICA: {{.Task.Slot}}
      
    
    

    如果您需要将其用作不支持 Go Templates 扩展的 commandentrypoint 的一部分。您可以在 shell 中使用该值。 (请注意,healthcheck.test 不需要此解决方法,因为它默认为 CMD-SHELL

    services:
      replicated-service:
        image: alpine/socat
        entrypoint: [
          "/bin/sh", 
          "-c", 
          "exec socat tcp-listen:9092,fork TCP:b$$REPLICA.internal:9092"
        ]
        environment:
          - REPLICA={{.Task.Slot}}
        healthcheck:
          test: socat /dev/null TCP:b$$REPLICA.internal:9092
        deploy:
          replicas: 2
    

    还要注意 $$ 以从 YAML 处理中转义 $

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多