我目前正试图获得一个dynamic的端口,所以我可以在CoreOS上注册与etcd。 这certificate非常困难。
这是我的单位文件
[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
不幸的是,第三个ExecStartPost失败。 任何帮助将不胜感激,我很难过!
为什么不使用主机级别的注册服务来注册与etcd端口的容器? 像https://github.com/progrium/registrator之类的东西可能能够做你正在试图做的shell。 简而言之,我已经成功地在CoreOS中使用类似这样的方式注册IP和端口对:
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"
你也许可以适应这个做端口。
docker二进制文件(/ usr / bin / docker)不能使用绝对path吗?
打印什么错误?