【发布时间】:2021-10-07 05:47:44
【问题描述】:
鉴于我有一个名为 Whale 的 docker swarm 服务,其副本数为 10
容器启动时
运行时程序如何确定它是哪个副本号?
IE:“我是鲸鱼复制品 3 of 10”
【问题讨论】:
标签: docker docker-swarm docker-container swarm
鉴于我有一个名为 Whale 的 docker swarm 服务,其副本数为 10
容器启动时
运行时程序如何确定它是哪个副本号?
IE:“我是鲸鱼复制品 3 of 10”
【问题讨论】:
标签: docker docker-swarm docker-container swarm
最简单的方法是通过环境变量告诉它,并使用docker service create支持的模板参数。
compose 语法如下所示。
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 处理中转义 $。
【讨论】: