我的coreos /舰队部署服务正在死亡,我不知道为什么

我正在尝试在EC2中使用一个shiny的新型coreos群集上部署nsqlookupd。 这是我的systemd单元文件:

[Unit] Description=nsqlookupd service After=docker.service Requires=docker.service [Service] EnvironmentFile=/etc/environment ExecStartPre=-/usr/bin/docker kill nsqlookupd ExecStartPre=-/usr/bin/docker rm nsqlookupd ExecStart=/usr/bin/docker run -d --name=nsqlookupd -e BROADCAST_ADDRESS=$COREOS_PUBLIC_IPV4 -p 4160:4160 -p 4161:4161 mikedewar/nsqlookupd ExecStartPost=/usr/bin/etcdctl set /nsqlookupd_broadcast_address $COREOS_PUBLIC_IPV4 ExecStop=/usr/bin/docker stop -t 1 nsqlookupd ExecStopPost=/usr/bin/etcdctl rm /nsqlookupd_broadcast_address 

我已经validation了容器工作正常,如果我只是运行ExecStart命令。 我的docker日志只是看起来像

 ~ $ docker logs nsqlookupd 2014/08/08 02:23:58 nsqlookupd v0.2.29-alpha (built w/go1.2.2) 2014/08/08 02:23:58 TCP: listening on [::]:4160 2014/08/08 02:23:58 HTTP: listening on [::]:4161 

和我的fleetctl杂志看起来像

 $ fleetctl journal nsqlookupd.service -- Logs begin at Sun 2014-08-03 12:49:00 UTC, end at Fri 2014-08-08 02:30:06 UTC. -- Aug 08 02:23:57 ip-10-147-9-249 systemd[1]: Starting nsqlookupd service... Aug 08 02:23:57 ip-10-147-9-249 docker[6140]: Error response from daemon: No such container: nsqlookupd Aug 08 02:23:57 ip-10-147-9-249 docker[6140]: 2014/08/08 02:23:57 Error: failed to kill one or more containers Aug 08 02:23:57 ip-10-147-9-249 docker[6148]: Error response from daemon: No such container: nsqlookupd Aug 08 02:23:57 ip-10-147-9-249 docker[6148]: 2014/08/08 02:23:57 Error: failed to remove one or more containers Aug 08 02:23:57 ip-10-147-9-249 etcdctl[6157]: 54.198.93.169 Aug 08 02:23:57 ip-10-147-9-249 systemd[1]: Started nsqlookupd service. Aug 08 02:23:57 ip-10-147-9-249 docker[6155]: 0fce4465f61c092541ba9d4c4e89ce13c4d6bedc096519034ed585d7adb5e0d7 Aug 08 02:23:59 ip-10-147-9-249 docker[6194]: nsqlookupd 

两者看起来都很好。 但是容器静静地死了,我的快速清单单位给出了

 $ fleetctl list-units UNIT STATE LOAD ACTIVE SUB DESC MACHINE nsqlookupd.service launched loaded deactivating stop nsqlookupd service 1320802c.../10.147.9.249 

运行docker images有点令人担忧:

 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE <none> <none> 8ef9d8f9d18d 9 minutes ago 710 MB mikedewar/nsqadmin latest 432af572bda8 2 days ago 710 MB mikedewar/nsqd latest 00bd4e474964 2 days ago 710 MB <none> <none> adf0ed97208e 3 weeks ago 710 MB mikedewar/nsqlookupd latest 2219c0e783d9 3 weeks ago 710 MB <none> <none> 35d2212f8932 3 weeks ago 710 MB mikedewar/nsq latest f9794fe056e1 3 weeks ago 710 MB busybox latest a9eb17255234 9 weeks ago 2.433 MB zmarcantel/cassandra latest b1168b45b4f8 4 months ago 738 MB 

因为我在过去的三周里经常更新mikedewar / nsqlookupd。 也许这是我第一次把东西推到docker的时间? 我很想知道我正在使用的图像是最新的。 我已经尝试了docker rmi mikedewar/nsqlookupd然后是docker pull mikedewar/nsqlookupdCREATED列仍然表示它是在3周前创build的。

我不知道这是否有用,但ExecStopPost=/usr/bin/etcdctl rm /nsqlookupd_broadcast_address命令似乎已经奏效 – 舰队日志中的etcdctl日志行显示我设法将密钥设置为我的IP,但是在容器死了,我不能从etcd得到这个密钥。

任何帮助在哪里寻找线索,或任何想法,为什么发生这将不胜感激! 可能很清楚,我对这类东西比较陌生。

您不应该在单元文件中以分离模式运行docker容器。 你的execstart包含它: ExecStart=/usr/bin/docker run -d 。 这将导致systemd认为该进程自从被分入后台之后立即退出。

至于pipe理版本,如果你想确保你得到最新的副本,你应该标记你的容器,然后把mikedewar / nsqlookupd:1.2.3。 您可以每次在您的车队单位文件中增加。