моя служба развертывания 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 ответ:
Не следует запускать контейнеры docker в отсоединенном режиме в единичном файле. Ваш execstart содержит его:
ExecStart=/usr/bin/docker run -d
. Это заставит systemd думать, что процесс вышел немедленно, так как он был разветвлен в фоновом режиме.Что касается управления версиями, если вы хотите быть абсолютно уверены, что получаете последнюю копию, вы должны пометить свои контейнеры, а затем вытащить mikedewar/nsqlookupd:1.2.3. Вы можете увеличивать его каждый раз в вашем файле единиц флота.