Je me demandais s'il y avait un moyen d'utiliser des variables d'environnement provenant de l'hôte où le conteneur est déployé, au lieu de celles prises d'où la commande docker stack deploy
Est exécutée. Par exemple, imaginez le docker-compose.yml
Suivant lancé sur un cluster Docker Swarm à trois nœuds:
version: '3.2'
services:
kafka:
image: wurstmeister/kafka
ports:
- target: 9094
published: 9094
protocol: tcp
mode: Host
deploy:
mode: global
environment:
KAFKA_JMX_OPTS: "-Djava.rmi.server.hostname=${JMX_HOSTNAME} -Dcom.Sun.management.jmxremote -Dcom.Sun.management.jmxremote.authenticate=false -Dcom.Sun.management.jmxremote.ssl=false -Dcom.Sun.management.jmxremote.rmi.port=1099"
Le JMX_HOSTNAME
Doit provenir de l'hôte sur lequel le conteneur est réellement déployé et ne doit pas avoir la même valeur pour chaque conteneur. Existe-t-il une bonne façon de procéder?
Oui, cela fonctionne lorsque vous combinez deux concepts:
Cela ramènerait le nom d'hôte à la valeur ENV de DUDE pour chaque conteneur pour être l'hôte sur lequel il s'exécute:
version: '3.4'
services:
nginx:
image: nginx
environment:
DUDE: "{{.Node.Hostname}}"
deploy:
replicas: 3
Cela fonctionne si vous exécutez la commande docker via env .
env JMX_HOSTNAME="${JMX_HOSTNAME}" docker stack deploy -c docker-compose.yml mystack
Un crédit à problème GitHub qui m'a fait pointer dans la bonne direction.