2017-09-08 5 views
1

Lorsque j'utilise docker-compose scale, je souhaite avoir un ID d'instance utilisé dans le fichier yml.Docker-composer scale - ID d'instance d'agent

docker-compose.yml:

myservice: 
    volumes: 
    - ./volumes/foo{AGENT_ID}/bar:/foo/bar 

J'ai vu beaucoup de discussions autour de ce sujet, mais je n'ai toujours pas trouvé une réponse claire.

Y at-il une variable d'environnement ou similaire que je peux utiliser de cette façon? Ce serait idéal si je pouvais l'utiliser dans les scripts bash, etc.

+0

Actuellement, je doute qu'il existe un moyen, je travaille sur un article qui montre une autre façon possible de le faire. Va poster dès qu'il sera prêt –

+0

Salut Tarun, merci. J'ai posté une autre question similaire. Je suis vraiment impatient de cet article, mais malheureusement, j'ai besoin d'une réponse plus tôt :) Peut-être que quelqu'un a une idée .. – purpletentacle

+1

Espérons max par demain –

Répondre

0

Je suis conscient que cela pourrait ne pas être une solution parfaite, mais si cela ne vous dérange pas de partager des données entre les nœuds, cela fonctionne bien. J'utilise ceci pour des tests locaux donc c'est sûr dans mon cas.

Docker-compose.yml

... 
volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 
... 

Dockerfile

... 
RUN pip3 install docker 
... 

Dans chaque nœud, je déployer le script suivant get_name.py

from docker import Client 
import os 

hostname = os.environ['HOSTNAME'] 

cli = Client(base_url='unix://var/run/docker.sock') 
data = cli.containers() 

for d in data: 
    id = d['Id'][:12] 
    names = d['Names'] 
    if id == hostname: 
     print(names[0]) 
     quit() 

print(hostname) 

Et quand le début de nœud (start.sh), il interroge son nom et crée un lien symbolique vers le correspondant Sous-répertoire g:

... 
NODE_NAME=$(python /root/scripts/get_name.py) 
OWN_VOLUME_NAME="/shared_volumes${NODE_NAME}" 
ln -s ${OWN_VOLUME_NAME} /data 
...