моя служба развертывания coreos/флота умирает, и я не могу сказать, почему


Я пытаюсь развернуть nsqlookupd, используя флот на совершенно новом блестящем кластере coreos в EC2. Вот мой файл блока 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

Я проверил, что контейнер работает нормально, если я просто выполню команду ExecStart. Мои журналы докеров просто выглядят как

~ $ 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-единиц дает

$ 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 в течение последних 3 недель. Может быть, именно тогда я впервые подтолкнул что-то к докеру хабу? Я хотел бы знать, что изображение, с которым я работаю, является самым современным. Я попробовал docker rmi mikedewar/nsqlookupd, а затем docker pull mikedewar/nsqlookupd, но столбец CREATED по-прежнему говорит, что он был создан 3 недели назад.

Я не знаю, полезно ли это, но команда ExecStopPost=/usr/bin/etcdctl rm /nsqlookupd_broadcast_address, кажется, сработала-строка журнала etcdctl в журнале флота предполагает, что мне удалось установить ключ к моему IP, но после того, как контейнер умирает, я не могу получить этот ключ от etcd.

Любая помощь в том, где искать ключи к разгадке, или любые идеи, почему это происходит, будут высоко оценены! Как, вероятно, ясно, я довольно новичок в такого рода вещах...
1 5

1 ответ:

Не следует запускать контейнеры docker в отсоединенном режиме в единичном файле. Ваш execstart содержит его: ExecStart=/usr/bin/docker run -d. Это заставит systemd думать, что процесс вышел немедленно, так как он был разветвлен в фоновом режиме.

Что касается управления версиями, если вы хотите быть абсолютно уверены, что получаете последнюю копию, вы должны пометить свои контейнеры, а затем вытащить mikedewar/nsqlookupd:1.2.3. Вы можете увеличивать его каждый раз в вашем файле единиц флота.