我目前正在尝试获取动态端口,以便可以在CoreOS上的etcd中注册它。事实证明,这非常困难。
这是我的单位档案
[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失败。任何帮助将不胜感激,我很沮丧!
ExecStartPost
命令外壳中,因此$PATH
可用,该docker
命令不必是绝对的。