Ficheiro da unidade de frota CoreOS e edição Docker Dynamic Port

1

No momento, estou tentando obter uma porta dinâmica para que eu possa registrá-la no etcd no CoreOS. Isso está se mostrando muito difícil.

Aqui está o meu arquivo de unidade

[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

Infelizmente, o terceiro ExecStartPost falha. Qualquer ajuda seria muito apreciada, estou perplexo!

    
por Pandalover 22.07.2014 / 05:38

2 respostas

1

Por que não usar um serviço de registro em nível de host para registrar os contêineres com portas para o etcd? Algo como link pode ser capaz de fazer o que você está tentando fazer no shell. Além disso, tive sucesso registrando pares de IP e porta no CoreOS usando algo assim:

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"

Você pode adaptar isso apenas para a porta.

    
por 09.09.2014 / 20:00
0

Você não está usando o caminho absoluto para o binário do docker (/ usr / bin / docker), pode ser a causa?

Qual erro ele imprime?

    
por 24.07.2014 / 14:41