J'ai deux services A et B.
A définit une valeur dans l'ETCD en cours de démarrage, dites que l'adresse IP publique qu'elle bénéficie d'un fichier d'environnement: p> B a besoin de cette valeur tel qu'il démarre, ainsi que sa propre adresse IP. Donc, quelque chose comme ça serait bien: p> Mais cela n'est évidemment pas possible car les variables OCCD ne sont pas présentes comme des variables d'environnement SystemD. Au lieu de cela, je peux faire une sorte de Quelqu'un peut-il me dire le moyen "droit" d'obtenir des valeurs d'ETCD dans mon - Mise à jour p> Donc, je suis en marche avec p> mais c'est assez moche. Je ne peux toujours pas croire que je ne manque pas quelque chose .. p> p> / usr / bin / bash -c 'exécuter des trucs' code> dans mon
exécutart code> mais c'est gênant surtout car j'ai besoin de SystemD pour développer
$ Coreos_public_ipv4 code> et ma nouvelle coquille bash pour développer
$ (ETCCDCTL get / a_addr) code>. Il requis de l'odeur de code et me fait penser que je manque quelque chose d'important. P>
exécutation code> de déclaration p>
3 Réponses :
Pouvez-vous conteneur lire directement à partir de etced code> tel qu'il démarre, sur la
Docker0 code> IP du pont, au lieu de passer dans les valeurs? Cela vous permettra également de faire une logique plus complexe sur la réponse, analysez JSON si vous le stockez comme valeur etce, etc. p>
Je n'avais aucune idée de la lecture de l'ETCD de l'intérieur du conteneur. Cela dit, je gère un binaire tiers en tant que point d'entrée du conteneur si court de la lecture de la lecture de l'ETCD de la DockerFile (qui semble un peu effrayant) Je ne suis pas sûr que cela résout le problème ...
J'ai eu du mal avec la même chose jusqu'à récemment. Après avoir lu une grande partie de la documentation de Coreos et Systemd, voici une version légèrement «nettoyeuse» de ce que vous faites:
[Service] EnvironmentFile=/etc/environment ExecStart=/bin/sh -c '/usr/bin/docker run -e A_ADDR=$(/usr/bin/etcdctl get /A_ADDR) -e MY_ADDR=$COREOS_PUBLIC_IPV4 mikedewar/B'
Check passenvironment = - Cela m'a aidé à passer Variables ENV dans la configuration de Docker SystemD.
J'utilise actuellement un tel contexte:
J'ai créé des scripts qui extrait des données d'un répertoire OCCD particulier P> Sa sortie suivante: p> /bin/sh -c '/usr/bin/docker run -p 9000:9000 $(/home/core/envs.sh) me/myapp -D FOREGROUND'
Cela fonctionne quelque peu - mais lorsque vos conteneurs Docker tombent sur le service SystemD ne le réalisent pas parfois.