1 votes

Fichier CoreOS Fleet Unit et problème de port dynamique Docker

J'essaie actuellement d'obtenir un port dynamique pour pouvoir l'enregistrer avec etcd sur CoreOS. Cela s'avère très difficile.

Voici mon fichier Unit

[Unit]
Description=test Elastic Search Server
After=docker.service
Requires=docker.service

[Service]
User=core
ExecStartPre=/usr/bin/docker pull shizzle/elasticsearch-server
ExecStart=/bin/bash -c '/usr/bin/docker start -a %n || /usr/bin/docker run --name="%n" -p :9200 -p :9300 shizzle/elasticsearch-server /elasticsearch/bin/elasticsearch -Des.config=/etc/elasticsearch.yml'
ExecStartPost=-/usr/bin/etcdctl mkdir /%n
ExecStartPost=/usr/bin/etcdctl set /%n/host %H
ExecStartPost=/bin/bash -c "/usr/bin/etcdctl set /%n/port $(docker inspect --format='{{(index (index .NetworkSettings.Ports "9200/tcp") 0).HostPort}}' %n)"
ExecStop=/usr/bin/docker stop /%n
ExecStopPost=/usr/bin/etcdctl rm /%n

Malheureusement, le troisième ExecStartPost échoue. Toute aide serait très appréciée, je suis dans l'impasse !

1voto

Andy Shinn Points 4081

Pourquoi ne pas utiliser un service d'enregistrement au niveau de l'hôte pour enregistrer les conteneurs avec des ports vers etcd ? Quelque chose comme https://github.com/progrium/registrator pourrait être en mesure de faire ce que vous essayez de faire dans Shell. En dehors de cela, j'ai réussi à enregistrer des paires d'IP et de ports dans CoreOS en utilisant quelque chose comme ceci :

ExecStart=/bin/sh -c "port=$(docker inspect -f '{{range $i, $e := .NetworkSettings.Ports }}{{$p := index $e 0}}{{$p.HostPort}}{{end}}' %n); while netstat -lnt | grep :$port >/dev/null; do etcdctl set /app/upstream/%n $COREOS_PRIVATE_IPV4:$port --ttl 300 >/dev/null; sleep 200; done"

Vous pourriez être en mesure d'adapter cela pour faire juste le port.

0voto

user1830432 Points 243

Vous n'utilisez pas le chemin absolu pour le binaire docker (/usr/bin/docker), cela peut-il être la cause ?

Quelle erreur imprime-t-il ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X