在 docker swarm 容器内时,如何确定容器的副本号?
While inside a docker swarm container, how do i determine which replica number a container is?
鉴于我有一个名为 Whale 的 docker 集群服务,副本数为 10
容器启动时
运行时程序如何确定它是哪个副本号?
IE:“我是鲸鱼复制品 3 of 10”
最简单的方法是通过环境变量告诉它并使用 docker service create 支持的模板参数。
撰写语法如下所示。
services:
replicated-service:
environment:
REPLICA: {{.Task.Slot}}
如果需要作为不支持Go Templates扩展的command
或entrypoint
的一部分。您可以使用 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 处理中转义 $
。
鉴于我有一个名为 Whale 的 docker 集群服务,副本数为 10
容器启动时
运行时程序如何确定它是哪个副本号?
IE:“我是鲸鱼复制品 3 of 10”
最简单的方法是通过环境变量告诉它并使用 docker service create 支持的模板参数。
撰写语法如下所示。
services:
replicated-service:
environment:
REPLICA: {{.Task.Slot}}
如果需要作为不支持Go Templates扩展的command
或entrypoint
的一部分。您可以使用 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 处理中转义 $
。